C#10在List, Queue 以及Stack中使用EnsureCapacity方法來提升效能

依樂祝發表於2021-08-25

簡介

在今天的文章中,我們將介紹 C# 10 中引入的一項新功能。這是已新增到 List、Queue 和 Stack 集合中的 EnsureCapacity 方法。我們將討論為什麼我們應該使用這個方法以及何時使用它。

那麼,讓我們開始吧。

作者:依樂祝

譯文連結:https://www.cnblogs.com/yilezhu/p/15182566.html

原文連結:https://www.c-sharpcorner.com/article/using-the-ensurecapacity-method-in-c-sharp-lists-queues-and-stacks/

為什麼以及何時使用EnsureCapacity 方法

這裡我們將首先了解為什麼需要使用這種方法以及何時使用。在 List、Queue 和 Stack內部使用的是陣列來表示集合。每次我們向這些集合新增更多項時,我們都需要增加這個內部陣列的大小。因此,會發生調整大小的操作。由於陣列大小進行了調整,因此這是一個效能損失。在我們知道此陣列的最大大小或假設我們知道將儲存在我們的 List、Queue 或 Stack 集合中的最大元素數量的情況下,我們可以使用EnsureCapacity 方法預設大小。這將確保最初設定此大小,並且不會調整內部陣列的大小,因此我們獲得了效能提升。讓我們在測試應用程式中實現它,

建立一個控制檯應用程式來測試EnsureCapacity 方法

我們將首先在 Visual Studio 2022 社群版中建立一個 C# 控制檯應用程式,如下所示,

在 Cshaarp 列表、佇列和堆疊中使用確保容量方法

在 Cshaarp 列表、佇列和堆疊中使用確保容量方法

在 Cshaarp 列表、佇列和堆疊中使用確保容量方法

在 Cshaarp 列表、佇列和堆疊中使用確保容量方法

在 Cshaarp 列表、佇列和堆疊中使用確保容量方法

用下面的程式碼替換 Program.cs 檔案,

var list=new List<int>();
list.EnsureCapacity(5);
for(vari=0;i<5;i++){
    list.Add(i);
    Console.WriteLine(list[i]);
}
thisList.Add(5);
Console.WriteLine(list[5]);

當我們執行此程式碼時,我們會看到以下輸出。

在 Cshaarp 列表、佇列和堆疊中使用確保容量方法

因此,我們看到即使超出了 EnsureCapacity 方法中定義的容量,我們仍然可以繼續向列表中新增元素。然而,此時,內部陣列又重新調整大小,我們失去了效能增益。這表明我們在設定EnsureCapacity 值時必須非常小心。

總結

在本文中,我們研究了在C#10中對List集合使用EnsureCapacity方法,討論了使用此方法的優點以及何時應該使用它。這同樣適用於佇列和堆疊集合。祝編碼快樂!

相關文章