是FirstOrDefault / First和OrderByDescending,比LastOrDefault / Last和OrderBy更快吗?

时间:2013-02-15 09:24:59

标签: c# performance linq

我有一个LINQ问题,我想知道是否有人知道答案。

通常情况下,如果我想查找特定字段排序的记录,例如“最新添加的人”,我会写一些类似的内容:

MyCollection.OrderByDescending(x => x.AddedDate).FirstOrDefault();

最近,我从团队中另一个喜欢写作的开发者那里学到了一些工作:

MyCollection.OrderBy(x => x.AddedDate).LastOrDefault();

所以我的问题是这个,是顺序下降并选择第一个,更快或更慢而不是订购另一个方向并选择最后一个?

我的想法是,第一个会更快,因为它不需要在返回对象时“尽可能地”迭代集合,但这比其他任何事情更像是一种预感!

1 个答案:

答案 0 :(得分:12)

如果你正在使用LINQ-to-Objects,那么第一个将略微更快。这两种排序每次会花费相同的时间*,但您认为FirstOrDefaultLastOrDefault更快是正确的。但是,与排序时间相比,差异可以忽略不计。

(请注意,完全排序只采用顶级项目比使用Last而不是First效率低得多;考虑实施类似MoreLINQ的MaxBy函数来获取项目想要O(n),而不是O(n log n),时间。)

如果你正在使用LINQ-to-else(SQL,Entities),它可能根本没有任何区别。

一般来说*;正如RB指出的那样,如果已经在某种程度上对数据进行了排序,情况可能并非如此。