可能重複:
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.通常,在進行基準測試時,您需要多次執行測試並對時間進行平均以獲得結果。一次迭代是不夠的。 –