Min() 和 Max() 还是单个老派的 foreach?

Sin*_*atr 5 c# linq performance

如果我有大量收藏并且我关心性能,我是否应该相信奇迹并使用

var min = Y.Min();
var max = Y.Max();
Run Code Online (Sandbox Code Playgroud)

或者我最好成为一名优秀的工程师并使用

var max = double.NegativeInfinity;
var min = double.PositiveInfinity;
foreach(var y in Y)
{
    if(y > max)
        max = y;
    if(y < min)
        min = y;
}
Run Code Online (Sandbox Code Playgroud)

YICollection<double>,因为我需要Countforeach。我很好奇类型是否正确,因为最小/最大,并且我需要从末尾迭代集合,所以会有

Y.OrderByDescending((o) => o)...
Run Code Online (Sandbox Code Playgroud)

D S*_*ley 5

Linq 没有“魔法”可以优化这样的查询。它所做的只是在集合顶部添加迭代器。Linq 旨在提高编码效率,而不是原始性能。

在某些情况下,Linq 查询的执行速度可能比 更快foreach,但这不是其中之一。 MinMax是两个独立的操作,因此编译器必须“向前看”以查看正在执行哪些操作,以了解它们是否可以组合到单个迭代中。它没那么复杂。