gpt4 book ai didi

.net - LINQ查询是否有很多开销?

转载 作者:行者123 更新时间:2023-12-03 11:46:40 28 4
gpt4 key购买 nike

IEnumerable<T>的简单LINQ查询是轻量级的还是重量级的?与手动编写forforeach循环相比,它们有何不同?对于何时更喜欢LINQ而不是手动搜索,是否有通用指南?

例如:

var lowNums =
from n in numbers
where n < 5
select n;

相比:
List<int> lowNums = new List<int>();

foreach (int n in numbers)
{
if (n < 5)
{
lowNums.Add(n);
}
}

我正在与同事讨论LINQ,他对使用它表示犹豫。他猜想为了支持LINQ可以做的一切,“幕后”可能会有很多事情发生。

上述示例之间在性能上有显着差异吗?有没有什么好的资源可以谈论LINQ在集合上的性能?一个简单的Google搜索 linq performance便发现了一些看似过时的文章。

最佳答案

LINQ in Action的作者使用for, foreach, List<T>.FindAll进行了一些基准测试,而LINQ查询都做同样的事情。根据查询的构造方式, LINQ的速度仅比慢10%左右。正如他们所说

LINQ does not come for free.



LINQ是一个复杂的主题,但是根据您对它的处理方式,它不必增加很多开销。通常,LINQ被构建为尽可能依赖于延迟执行,以节省内存和CPU,直到您真正需要它为止。

但是,您必须知道不同查询运算符的工作方式,因为更改查询流程可能会极大地改变其执行方式。您所描述的简单查询通常不是问题,但是像 Reverse()这样的运算符和转换运算符可能会引起一些麻烦,因为它们需要立即迭代结果集。编写相同查询的方法通常有多种, 取决于构造它的方式,您可能会发现性能损失最小,或者使其速度是等效循环的两倍。

但是,对于我的日常编码,它提供的便利性和简洁性远远超过了任何性能方面的考虑。永远不要预先优化!

关于.net - LINQ查询是否有很多开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1185209/

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