对于使用LINQ过滤集合,我有一个非常普遍的问题。假设您正在数据库表上运行相当复杂的筛选器。它在运行,比如说,10,000次,每次过滤器都可能不同。就性能而言,最好是将整个数据库表集合加载到内存中并使用LINQ执行筛选器,还是应该让数据库使用SQL处理筛选(因为这是构建的)。有什么想法吗?
编辑:,我应该更清楚。假设我们讨论的是一个包含20列的1000条记录的表(包含int/string/date数据)。目前,在我的应用程序中,我每隔1/2小时运行一次查询,将所有数据放入一个集合(将该集合保存在应用程序缓存中),并过滤整个应用程序中缓存的集合。我想知道,这是否比往返数据库服务器(这是Oracle fwiw)更糟糕。
发布于 2012-03-23 14:25:33
更新后:
它在运行,比如说10,000次
我要假设一张有1000条记录的桌子
假设1k记录可以很容易地放入内存中,这似乎是合理的。
然后运行10k过滤器将大大降低内存(LINQ)。
使用SQL将意味着加载10M记录,大量的I/O。
发布于 2012-03-23 13:51:59
编辑
它的性能取决于您拥有的数据量。如果您有大量的数据,那么请选择sql,如果小于linq。它还取决于从sql服务器调用数据的频率--它比在内存中加载数据和应用linq要频繁得多,但如果不是sql,则更好。
第一答案
最好是在sql方面,而不是在内存中加载,而不是应用linq过滤器。
一个更好的理由是使用sql而不是linq。
如果选择linq,当您获得10,000条记录时,它会在内存中加载并增加网络流量
如果选择,那么内存利用率就会减少,并且减少了网络流量。
发布于 2012-03-23 13:55:17
这取决于您的表的大小以及它存储的数据类型。
就我个人而言,如果您计划在同一个请求中使用所有过滤器,我将返回所有数据。
如果它是一个按需使用ajax的过滤器,您可以每次从数据库重新加载数据(确保数据是最新的)
https://stackoverflow.com/questions/9840320
复制相似问题