可能重复:
Should LINQ be avoided because it's slow?LINQ比简单循环慢多少?
我爱LINQ。正如我今天在另一篇帖子中看到的“这是自切片面包以来最好的事情”,我完全同意。但在我工作的公司里,其他人似乎都讨厌LINQ。
几个星期前,我第一次使用ReSharper,当我编码时,ReSharper突然告诉我,我的foreach循环可以转换成LINQ表达式。这对我来说很神奇,我向同事展示了。非常感谢我的惊喜,他说:“我希望它可以反过来将LINQ变成循环。那会更快!“
那么LINQ-to-Objects真的很慢吗?我尝试过自己。 当我运行下面的示例几次我得到已发生滴答周围350
Stopwatch sw = new Stopwatch();
List<Person> personList = new List<Person>();
for (int i = 0; i < 5000; i++)
{
Person p = new Person() {ID = i};
personList.Add(p);
}
sw.Start();
Person searchPerson = null;
foreach (Person person in personList)
{
if (person.ID == 4321)
{
searchPerson = person;
break;
}
}
sw.Stop();
Console.WriteLine(sw.ElapsedTicks);
如果我改变循环的LINQ查询(ReSharper的将这样做对我来说)我绕过900 ElapsedTicks不止是循环的两倍。
Person searchPerson = personList.FirstOrDefault(person => person.ID == 4321);
因为看起来LINQ确实比较慢,如果你使用它很多,这可能是一个问题。而在我们公司,我们有很多数据。那么避免LINQ是正确的决定还是我们做错了什么?
p.s.通常,在进行基准测试时,您需要多次执行测试并对时间进行平均以获得结果。一次迭代是不够的。 –