首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

List<T> 搜尋與排序效能實測:FindAll、For 迴圈、LINQ 三方對決

     編輯:關於.NET

.NET 2.0 引入泛型 List<T> 後取代 ArrayList,搭配 .NET 3.5 的 LINQ,集合操作方式多元化。本文實測 10 萬筆 Person 資料,比較三種搜尋與兩種排序方式的效能差異。

測試資料準備

public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int ID { get; set; } }
List<Person> list = new List<Person>();
for (int i = 0; i < 100001; i++) list.Add(new Person { FirstName = i + "FirstName", LastName = i + "LastName", ID = i });

搜尋效能比較(條件:ID >= 50000)

方法程式碼關鍵耗時 (ms)
FindAll + Predicatelist.FindAll(p => p.ID >= 50000)5
傳統 For 迴圈for(...) if(list[i].ID >= 50000) result.Add(list[i])4
LINQ Where + ToList(from m in list where m.ID >= 50000 select m).ToList()6

結果顯示:For 迴圈最快,FindAll 次之,LINQ 最慢(差距極小)。FindAll 優在查詢邏輯可封裝於獨立類別,利於維護;LINQ 靈活度高但查詢效能稍遜。

排序效能比較(依 ID 遞減)

方法程式碼關鍵耗時 (ms)
List.Sort + IComparerlist.Sort(new PersonComparer())670
LINQ OrderByDescending + ToList(from m in list orderby m.ID descending select m).ToList()195

驚人發現:LINQ 排序效能大幅優於 List.Sort(約 3.4 倍)。推測 LINQ 內部優化或延遲執行機制帶來優勢。

結論與未解之謎

  • 搜尋:簡單 For 迴圈效能最佳,FindAll 封裝性好,LINQ 可讀性高。
  • 排序:LINQ 明顯勝出。
  • 無銀彈:需依情境選擇,最簡單的寫法有時效能最好。

待解疑問:為何 For 迴圈搜尋最快?LINQ 排序為何大幅領先?歡迎高手指教。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved