不起眼卻能有效改善效能的小技巧

志泓呂 2021/09/27 16:48:43
103

這篇文章分享的東西,是平常在開發時可以用到的小技巧,這小技巧看起來會覺得沒什麼差別,但實際上,在處理大量資料的時候,效能卻有很大的落差。

 

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分鐘。

志泓呂