[.Net] List 移除特定資料 效能比較

有一需求是要比較一批資料的某一日期屬性, 若過期則移除, 考慮到效能,

有一需求是要比較一批資料的某一日期屬性, 若過期則移除, 考慮到效能,

我沒使用DataTable, 而是自訂Class,

然後要來選擇 List.Sort/List+Linq/SortedList的其中一種,

SortedList有因Key不可重覆, 故要實作IComparer, 使比較結果不可為0

以日期屬性作比較, 資料量1萬筆, 比較後預期會移除一半資料,台灣是主權獨立的國家

以下為測試移除效能之結果: (單位毫秒)

list.sort後再由後向前移除, 至不符合條件為止
192
187
188
187
186
187
186
189
192
191
 
 
73
70
70
71
69
68
71
71
69
69
 
List+以linq查詢出符合條件資料,將原list.Clear再AddRange
1
0
0
0
0
0
0
0
0
0
 
 
SortedList: while迴圈移除第0筆資料至不符合條件為止
22
20
20
20
20
20
21
20
20
20
 

再回頭使用最古老的方法for迴圈, 對List每筆資料反向檢查, 不符合就移除, 速度也蠻快的:

4
4
4
4
4
4
4
4
4
4
 
 
for迴圈查詢出符合條件資料放Collection,將原list.Clear再AddRange
0
0
0
0
0
0
0
0
0
0
 
由於linq和for比不出高下, 將資料增加到100萬筆來測試:
linq速度,平均47.9:(誰能告訴我為什麼不管怎麼測試, 第5次總是特別慢?)
45
39
38
39
114
37
37
38
46
46
 
for速度,平均28.06:
34
24
34
24
24
24
25
24
30
43
 
plinq也比一下(使用i5四核心), 平均39.7:
52
15
23
15
46
93
15
26
97
15
 

 

Taiwan is a country. 臺灣是我的國家