List <>最好使用最大容量的init,只使用其中的一小部分,或者没有容量的init

jam*_*one 8 .net c# list

我有一个List<MyStruct>我正在初始化为空的,我将在解析数据时在循环中填充此结构.我知道将有一个最大可能的条目数将插入此列表中.现在让我们说1000.但是在我解析了1000个条目后,我最终可能只将2放入列表中.因此,我应该初始化容量为1000的List,或者不指定容量,只需添加少量条目.然而,最终可能会增加所有1000个.性能明智的最佳方式是什么?

Meh*_*ari 21

没关系.不要微观优化.只有你有一个好主意才能设置容量大致是你需要的数量.在引擎盖下,每次增长时列表都会翻倍,因此增长的数量是O(log(n)).它应该非常有效.


Nic*_*ick 9

如果它真的可以广泛地变化,那么你可能不想设置容量.对于大多数系列而言,容量在达到要求时翻倍(我相信默认容量为16),因此当您填满时,您的容量将非常接近最大值.

  • 默认值为 0,然后调整为 4。来自 .NET 源代码: int num = this._items.Length == 0 ? 4 : this._items.Length * 2; (2认同)