不起眼卻能有效改善效能的小技巧
這篇文章分享的東西,是平常在開發時可以用到的小技巧,這小技巧看起來會覺得沒什麼差別,但實際上,在處理大量資料的時候,效能卻有很大的落差。
1. 預先宣告好變數,並重複使用
上面列出的2個方法,一個是在迴圈外預先宣告好變數,重複使用此變數。另一個則是在迴圈內,每次使用時都宣告一個新的變數。
2個方法在資料量小的時候乍看之下沒什麼差別,但當資料量非常多的時候,所使用的記憶體會差非常多,進而影響到執行的效能。
第1個方法因為是重複使用相同的記憶體空間,所以不論資料量多或少,所使用的記憶體都是一樣的。
第2個方法是每次使用時都宣告一個新的變數,每次新宣告變數就會增加使用的記憶體,當資料量多時,所使用到的記憶體就會非常多,進而影響執行效能。
實際測試:5萬筆資料使用第二種方法需花費20分鐘
5萬筆資料使用第一種方法只需花費不到10分鐘
2者相差了近1倍的時間
2. 使用Dicitionary<> 搭配 Key,取代 List<> 搭配 Linq 來取得資料
一般開發時比較常會使用 List<> 搭配 Linq 下指定條件去取得資料,
這種方法在取得大量資料或不是執行迴圈逐筆查詢資料的情況下,效能不會有太大的影響。
但是在使用迴圈逐筆查詢且List<> 有大量資料的情況下,因為需要在大量的資料內去查詢符合條件的資料出來,效能會影響很大。
而相較於 Dicitionary<> 搭配 Key,因為是使用索引值的概念去取得資料,
所以省去了查詢的時間。
實際測試:
10萬筆資料使用 List<> 搭配 Linq ,跑迴圈逐筆查詢,需花費35分鐘。
10萬筆資料Dicitionary<> 搭配 Key,跑迴圈逐筆查詢,僅需花費4分鐘。