gpt4 book ai didi

c# - Linq 性能 : (ElementAt, 计数)与(foreach)

转载 作者:太空狗 更新时间:2023-10-29 23:59:11 25 4
gpt4 key购买 nike

我使用 (ElementAt,Count) 和 (foreach) 遍历 IEnumerable 作为 Linq 查询的结果。令我惊讶的是,性能差异是 25-30 倍!这是为什么?

IEnumerable<double> result =
... simple Linq query that joins two tables
... returns about 600 items

double total = 0;

// Method 1: iterate with Count and ElementAt
for( int i = 0; i < result.Count(); i++ )
{
total += result.ElementAt(i);
}

// Method 2: iterate with foreach
foreach( double value in result )
{
total += value;
}

最佳答案

ElementAt()方法是 O(n),除非 IEnumerable 的实际具体类表示优化它。这意味着每次调用它时,它都必须遍历整个 Enumerable 以找到位于 n 的元素。 .更不用说因为你有 i < result.Count()在你的 for 的条件部分循环,它必须每次都循环遍历整个可枚举以获得该计数。

第二种方式,你遍历result正好一次。

关于c# - Linq 性能 : (ElementAt, 计数)与(foreach),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8083668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com