2013-06-28 50 views
0

我正在處理List集合。下面哪個將執行得更快? 考慮在結果項的數目爲1000。 方法1:哪種方法更快 - foreach或LINQ選擇?

var linqResult = from item in databaseObject 

選擇項;

foreach(customobject item in linqResult) 
{ 
List<customobject>.add(item); 
} 

方法2

var data = from item in databaseObject 
select new customobject() 
{ 
//initialize properties 
}); 

data.ToList(); 
+4

沒關係。 – SLaks

+2

您是否嘗試運行代碼?你發現你的結果是什麼? –

+0

數據庫開銷足夠大,我懷疑它會非常接近。如果您只希望獲取某些字段,後者可能更有效。 –

回答

0
  1. 我建議你單元/性能測試你的代碼,看看你的特定場景哪個更快。

  2. 這取決於你在做什麼。我的直覺是LINQ查詢(正確性能測試和優化)將比運行foreach循環更快。

  3. LINQ-TO-SQL(您已經標記了),據我所知,根據您的LINQ查詢生成SQL命令,並針對數據源運行這些命令。這肯定會比foreach循環更快,因爲數據源將根據查詢返回您期望的內容,而foreach循環可能需要首先從SQL中獲取整個集合,然後遍歷它。

  4. 如果你正在使用In-Memory集合,你可能想研究LINQ vs foreach和Parallel.ForEach的速度。並行性「可能」比等效的LINQ執行速度更快,但是同樣需要對所有場景進行性能測試。

+1

注意:他或她也應該嘗試在測試中切換順序(先運行foreach,然後linq秒,反之亦然)。另外,關於你的第4點,還有一個['.AsParallel()'LINQ方法](http://msdn.microsoft.com/en-us/library/system.linq.parallelenumerable.asparallel.aspx)用來代替'Parallel.ForEach'。下面是一篇很棒的PDF文章,比較兩篇文章:http://blog.mssoftwareconsulting.com/msswc/blog/file.axd?file=WhenToUseParallelForEachOrPLINQ.pdf – valverij

+0

@valverij,感謝您的注意,深受好評! :-) – series0ne

0

我認爲LINQ選擇的好處,它爲您提供了延遲執行而簡單的foreach沒有。如果您使用 yield return

您可以實現linq默認提供的功能。 我不知道是否有任何性能差異,但延遲執行可以爲您節省大量內存。