预定义列表容量

时间:2011-09-26 13:15:25

标签: c# performance generics

为了防止多次重新分配,我的代码中有类似的内容:

List<T> result = new List<T>(100);

在我返回新列表之前是否需要致电TrimExcess

result.TrimExcess();
return result;

例如,目标是使前100个项目的分配更快。这是正确的做法吗?还是我需要做其他事情?

5 个答案:

答案 0 :(得分:2)

你不需要修剪。该列表记录实际添加的项目数,这与初始容量不同,初始容量只是预分配。

答案 1 :(得分:1)

好的..

如果您不打算添加更多项目,那么您可以像写下一样留下它。

答案 2 :(得分:1)

如果你的应用程序使用了大量内存或超过应用程序,那么我会调用TrimExcess()但它可能不值得,除非列表中包含的项目少于30个左右,即使这样你也可能只是保持原样。但是,如果您希望分配对于前100个更快,那么如果您知道要添加超过100个项目,则将初始大小设置为100或更大。

答案 3 :(得分:1)

通过定义initail容量,您进行了必要的优化。 如果你调用TrimExcess()方法,可能会导致比你真正想要的更多的分配工作。

TrimExcess()的{​​{3}}说:

  

重新分配和复制大型List的成本可以是   但是,如果相应的话,那么TrimExcess方法什么都不做   列表容量超过容量的90%

我对此的理解是,您甚至可能无法通过该电话更改列表中的任何内容。 这让我觉得你真的没有太大的收获。

答案 4 :(得分:-1)

让我们说清楚,这样做不会为100 T的分配保留内存,而只是100&#39;指针&#39;对T.所以没关系,但可能没什么帮助。