[英]What is the importance of setting `IList` capacity?
在創建時設置列表容量的重要性是什么?
例如,說我肯定知道 ,我的名單將只包含在其整個生命周期n項。
在List<T>
,有一個容納您的項目的靜態大小的集合。 一旦達到該集合的容量,則List<T>
重新調整其大小,這對性能會產生影響(對您來說可能很重要,也可能不太重要)。
通過設置初始容量,您可以避免執行那些調整大小的操作。
每當列表需要超過其當前容量時,就必須重新分配內存並移動內容,這需要時間和精力。
如果您提前知道列表的大小,則可以避免這種情況。
您會有所提高,因為列表不必增加。 列表的增長是O(n),其中n是當前元素的數量,標准List<>
通過將其當前大小加倍來增長。 考慮到所有因素,將元素添加到列表的末尾平均仍然是O(1)操作(這是因為最后要插入n個元素,您平均要在末尾插入n個元素(每個元素都為O(1 )操作)和舊緩沖區與較新緩沖區之間的n個復制操作(每個操作都是O(1)操作),因此每次加法都在溢出O(1)上)
這將稍微提高性能,因為在創建列表時將分配必要的內存,並且在添加更多元素時CLR不必增加列表大小。
請注意,即使您指定列表大小,但如果添加的元素比預期的多,則無論如何都會增加它的大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.