【发布时间】:2015-06-14 17:04:54
【问题描述】:
我有一个大集合,我需要根据两个属性获取最新项目。 第一步是根据 date 属性对列表进行排序。这一切都很好而且很快。
然后我按两个属性对新列表进行分组,并从每个属性中取出第一项。
var one = Fisks.Where(s=>s.Havn.Id == 1).OrderByDescending(s=>s.Date);
var two = one.GroupBy(s=>new {s.Arter.Name, s.Sort});
var three = two.Select(s=>s.FirstOrDefault());
这可行,但是在大型集合上使用它时确实很慢。如何避免使用 groupBy 但仍然得到相同的结果?
谢谢!
【问题讨论】:
-
尝试为数据库中的表添加索引以提高此类操作的性能。
-
我认为您将不可接受的性能归因于查询的随机元素(GroupBy)。使用 Profiler 和 Showplan XML 事件捕获执行计划。
-
我假设你明白这些的执行被推迟了?你确定是
GroupBy这么慢吗? -
@usr 我已经尝试测试我的方式到它的速度很慢,而且我记得我对 SQL 查询的有限使用,GroupBy 真的很慢。但是我在哪里可以捕捉到它?一些链接?
-
google.com/… GroupBy 本身并不慢。也许您应该让自己更熟悉一般的查询调优。
标签: c# performance linq