C# - List 初始容量的用途是什么? [复制]

2024-03-10

我正在尝试执行以下操作:

int count = 50;
List<float> myList = new List<float>(50);
output[0] = 0.0f;

但我收到错误:

ArgumentOutOfRangeException: Argument is out of range.
Parameter name: index

显然我误解了列表(或者可能是任何其他集合?)的初始容量。有人可以向我解释一下初始容量的用途吗?


列表的底层有一个数组。当您添加到 50 个元素时,这会减少内存重新分配的数量。这需要时间和内存,并且给垃圾收集器提供了一些工作要做。

这就是为什么列表(T).容量 http://msdn.microsoft.com/en-us/library/y52x03h2(v=vs.110).aspx是一件事。

这是一些基准 http://www.dotnetperls.com/capacity100 份.Adds:

 Method A: Dictionary, no capacity
 Time:     1350 ms

Method B: Dictionary, has capacity
Time:     700 ms

Method C: Dictionary, const capacity
Time:     760 ms

Method D: Dictionary, over-large capacity
Time:     1005 ms

Method E: List, no capacity
Time:     1010 ms

Method F: List, accurate capacity
Time:     575 ms

因此,当您添加 100 个元素时,预分配似乎只需要一半的时间。虽然我不喜欢过早优化,但如果您知道列表有多大,那么给 CLR 一个提示听起来确实值得。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - List 初始容量的用途是什么? [复制] 的相关文章

随机推荐