為什麼總是應該考慮給定 List 的初始大小

2022-12-13 12:00:51

在 .Net 技術中,使用 List<> 來儲存資料是很常見的。List<> 是一個可以動態增長的泛型集合型別,可以儲存任何型別的資料。

但是,在實際使用中,很多人並不注意給定 List<> 的初始大小,導致在資料量較大時,List<> 的效能可能不盡如人意。

程式碼範例

下面,我們以一個簡單的程式碼範例來說明為什麼應該考慮給定 List<> 的初始大小。

假設我們要儲存 100 萬個整數,不考慮初始大小的情況下,我們的程式碼可能如下:

var numbers = new List<int>();
for (int i = 0; i < 1000000; i++)
{
numbers.Add(i);
}

上面的程式碼在執行時,會依次往 List 中新增 100 萬個整數。但是,如果你執行該程式碼,你會發現它的執行速度很慢,而且內記憶體佔用也很大。

為了解決這個問題,我們可以在範例化 List<> 的時候,指定它的初始大小。這樣做的好處在於,List<> 在擴容的時候,就不需要按照預設的演演算法(通常是原來的容量的一倍)進行擴容,而是使用我們設定的初始大小。這樣可以避免記憶體佔用過多,提升 List<> 的執行效率。

如果我們指定 List<> 的初始大小為 100 萬,那麼程式碼如下:

var numbers = new List<int>(1000000);
for (int i = 0; i < 1000000; i++)
{
numbers.Add(i);
}

上面的程式碼執行效率會比不考慮初始大小的情況下要高得多。

當然,這並不意味著你每次使用 List<> 的時候都要指定它的初始大小。如果你的資料量不是很大,或者你不太關心效能,那麼不指定初始大小也沒有什麼問題。

但是,如果你希望提高程式碼的執行效率,或者你的資料量非常大,那麼你應該考慮指定 List<> 的初始大小。這樣,你的程式碼執行效率會更高,記憶體佔用也會更少。

使用建議

如果你要使用 List<> 儲存資料,我們建議你在實際開發中遵循以下幾條原則:

  • 如果你的資料量不是很大,或者你不太關心效能,那麼可以不指定 List<> 的初始大小。
  • 如果你的資料量較大,並且希望提高程式碼的執行效率,那麼可以考慮指定 List<> 的初始大小。這樣可以避免在執行時動態增長記憶體,提高程式碼的執行速度。
  • 如果你不確定你的資料量會有多大,那麼可以考慮指定一個合理的初始大小。這樣,當資料量較大時,List<> 可以在初始大小的基礎上繼續增長,避免記憶體不足的情況。

總結

總之,指定 List<> 的初始大小對於提高程式碼的執行效率和記憶體佔用有很大的好處。如果你的資料量較大,或者你希望提高程式碼的效能,那麼應該考慮指定 List<> 的初始大小。

參考資料

以上參考資料提供了有關 List<> 的更多資訊,包括 List<> 的用法、泛型集合型別的基礎知識等。希望可以為你提供幫助。

希望本文能對你有所幫助。感謝你的閱讀。

本文采用 Chat OpenAI 輔助注水澆築而成,如有雷同,完全有可能。