Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数组中的排序与SQL中的排序_C#_Sql_Sql Server - Fatal编程技术网

C# 数组中的排序与SQL中的排序

C# 数组中的排序与SQL中的排序,c#,sql,sql-server,C#,Sql,Sql Server,我有大约1000行数据。在ASPX页面上,每当用户单击“排序”按钮时,它基本上将根据特定列对结果进行排序 我建议在SQL查询中对结果进行排序,只需一个Order by子句就可以更轻松地对结果进行排序 但是,我的经理坚持让我将结果存储在数组中,然后在数组中对数据进行排序,因为他认为每次用户单击排序按钮调用数据库都会影响性能 只是出于好奇——这真的重要吗 另外,如果我们忽略行数,从性能上看,这些方法中哪一种更有效?好的,有三种选择: 在SQL中排序 在ASP代码中对服务器端进行排序 在Javascr

我有大约1000行数据。在ASPX页面上,每当用户单击“排序”按钮时,它基本上将根据特定列对结果进行排序

我建议在SQL查询中对结果进行排序,只需一个
Order by
子句就可以更轻松地对结果进行排序

但是,我的经理坚持让我将结果存储在
数组中,然后在
数组中对数据进行排序,因为他认为每次用户单击排序按钮调用数据库都会影响性能

只是出于好奇——这真的重要吗


另外,如果我们忽略行数,从性能上看,这些方法中哪一种更有效?

好的,有三种选择:

  • 在SQL中排序
  • 在ASP代码中对服务器端进行排序
  • 在Javascript中对客户端进行排序
  • 我想说,没有什么理由同意(2)。在返回数据时,对数据库进行排序是非常必要的:数据库就是这样设计的

    但是如果你想有一个用户可以点击的按钮,有一个强有力的理由(3)。这意味着这一切都是在客户端完成的,因此您无需向web服务器发送任何内容。如果您只有几行(现在1000行真的很少),它会感觉快得多,因为您不必等待发送请求和获得响应

    实际上,如果你有太多的东西使得Javascript作为一种排序机制太慢,那么你有太多的东西来显示它们


    简言之,如果这是显示初始页面的一次性操作,并且您不希望用户必须与页面交互并在不同的列上排序,那么请使用(1)。但是,如果用户希望在页面加载后对内容进行排序,那么(3)是您的朋友。

    在我的上一位雇主那里,我们遇到了类似的问题。我们必须高效、快速、一致地将大量数据返回到datagridview对象中

    他们提出的解决方案是使用一组过滤器,用户可以使用这些过滤器缩小查询返回的范围,并将返回的最大行数设置为500。然后,程序对这些对象的数组进行排序

    这背后的原因是:

  • 大多数人不会处理那么多行,他们通常会寻找一个特定的项目(因此过滤器)
  • 在客户端进行排序确实为服务器节省了大量时间,特别是当数千人可能同时查询数据时
  • GUI对象本身的性能在某个时候开始成为一个问题(限制返回的原因)

  • 我希望这能对您有所帮助。

    从数据建模角度和应用程序架构模式来看,它的“最佳实践”是将排序/过滤放在MVC模式的“控制器”部分。这与一些人已经投票赞成的上述答案直接相反

    这个问题的答案是:“视情况而定”

    如果应用程序只保留一个表,没有连接,并且行数较少,那么在客户端上用JavaScript排序很可能会赢得性能测试

    但是,由于它已经是APSX,您可能正在准备扩展数据/模型。--一旦有更多的表和联接,并且如果UI包含一个数据网格,其中要排序的列的选择将根据每个客户端而改变,那么中间层可能应该为您的应用程序处理此排序

    我建议回顾Tom Dykstra的经典之作。这个例子展示了正确的MVC体系结构的价值,以及在多个列上实现排序/过滤的方便性

    请记住,应用程序会随着时间的推移而变化(读作“增长”),所以要使用MVC之类的体系结构模式来规划它。

    简短回答 啊。。。去他妈的:像这样的问题没有简单的答案

    更长的答案 最佳解决方案取决于许多因素。这个问题有点模糊,但为了简单起见,让我们假设1000行存储在数据库中,由客户端检索。 现在,有几件事需要解决:

  • 在各种情况下,绩效可能意味着各种事情
  • 排序是(相对)昂贵的,无论你在哪里做
  • 在数据库中进行排序时,成本最低,因为数据库已经拥有所有必要的数据,并且针对这些操作进行了优化
  • 在网站上发布问题以“证明你的经理是错的”是个坏主意。(问这个问题很容易,不必提及经理。)
  • 您的经理认为您应该将所有数据上传到客户机,并在那里进行所有处理。这个想法有一些优点。对于大小合理的数据集,客户机上的处理速度几乎总是比往返服务器要快。这里有一个警告:您必须首先将所有这些数据发送给客户端,这可能是一个非常昂贵的操作。1000行已经是发送到客户机的一个大负载。如果您的数据集变得更大,那么您将疯狂地一次发送所有数据集,特别是如果用户确实只需要几行。在这种情况下,您必须在服务器端执行某种形式的分页,根据用户的请求发送数据块,通常一次发送10或20行。一旦您开始在服务器上分页,您的排序决定就为您做出了:您别无选择,只能在那里进行排序。否则,您如何知道要发送哪些行

    对于大多数“业务线”应用程序,您的查询处理属于数据库。我的一般建议是:尽可能在数据库中进行排序和分页,然后将请求的数据作为JSON对象返回给客户机。请不要仅仅为了更新网格中的数据而重新生成整个网页。(我犯了这个错误,这让我很尴尬。)这里有几个问题