OrderBy().Last()或OrderByDescending().First()性能

Res*_*uum 37 .net c# linq

我知道这可能是微优化,但我仍然不知道使用中是否有任何差异

var lastObject = myList.OrderBy(item => item.Created).Last();
Run Code Online (Sandbox Code Playgroud)

要么

var lastObject = myList.OrderByDescending(item => item.Created).First();
Run Code Online (Sandbox Code Playgroud)

我正在寻找Linq对象和Linq to Entities的答案.

Hen*_*man 18

假设两种排序方式都需要相同的时间(并且这是一个很大的'if'),那么第一种方法会产生额外的成本.Last(),可能需要完整的枚举.

对于面向SQL的LINQ,这个论点可能更强大.


Tho*_*que 6

(我的答案是关于Linq to Objects,而不是Linq to Entities)

我不认为这两个指令之间存在很大差异,这显然是微优化的一个例子.在这两种情况下,需要对集合进行排序,这通常意味着复杂性O(n log n).但是,您可以O(n)通过枚举集合并跟踪最小值或最大值来轻松获得相同的结果.Jon Skeet以其扩展方法的形式在他的MoreLinq项目中提供了一个实现MaxBy:

var lastObject = myList.MaxBy(item => item.Created);
Run Code Online (Sandbox Code Playgroud)