设置`IList`容量的重要性是什么?

时间:2011-09-30 12:36:51

标签: c# .net list

在创建时设置列表容量的重要性是什么?

例如,假设我知道以确保我的列表在其整个生命周期中仅包含 n 项目。

4 个答案:

答案 0 :(得分:14)

List<T>内部,有一个静态大小的集合来保存您的项目。一旦达到该集合的容量,List<T>重新调整它的性能就会受到影响(对您来说可能重要也可能不重要)。

通过设置初始容量,您可以避免执行这些重新调整大小的操作。

答案 1 :(得分:7)

每当列表需要超过其当前容量时,必须重新分配内存并移动内容,这需要花费时间和精力。

如果您提前知道列表的大小,可以避免这种情况。

答案 2 :(得分:3)

你会有一点速度,因为列表不一定要增长。增长列表是O(n),其中n是当前元素数,标准List<>通过将其当前大小加倍而增长。所考虑的一切,在列表的末尾添加一个元素仍然是平均O(1)操作(这是因为最后插入n个元素,你将平均有n个插入到末尾(每个都是O(1) )操作)和旧缓冲区和新缓冲区之间的n个复制操作(每个操作都是一个O(1)),所以每个add都是overage O(1))

答案 3 :(得分:3)

这将略微提高性能,因为在创建List时将分配必要的内存,而CLR在添加更多元素时不必增加List大小。

请注意,即使您指定了列表大小,如果添加的元素超出预期,它也会增加。