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

dou*_*ald 12 c# linq performance

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

通常,如果我想查找特定字段所订购的记录,例如"最新添加的人",我会写一些类似于:

MyCollection.OrderByDescending(x => x.AddedDate).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

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

MyCollection.OrderBy(x => x.AddedDate).LastOrDefault();
Run Code Online (Sandbox Code Playgroud)

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

我的想法是,首先会更快,因为它不需要在返回对象时"尽可能地"迭代集合,但这比其他任何事情都更加预感!

Raw*_*ing 12

如果您使用LINQ到对象,第一个会稍微更快.两种类型的每种都会花费相同的时间*,但你认为这种FirstOrDefault方式比它更快LastOrDefault.但是,与排序时间相比,差异可以忽略不计.

(请注意,整个排序仅举顶部的项目远比使用效率越低LastFirst;考虑实施类似MoreLINQ的一些MaxBy功能,以得到你想要的项目O(n),而不是O(n log n)时间.)

如果你正在使用LINQ到别的东西(SQL,实体),它可能根本就没有区别.

*一般来说; 正如RB指出的那样,如果数据已在某种程度上已经订购,则情况可能并非如此.