为了防止多次重新分配,我的代码中有类似的内容:
List<T> result = new List<T>(100);
在我返回新列表之前是否需要致电TrimExcess
?
result.TrimExcess();
return result;
例如,目标是使前100个项目的分配更快。这是正确的做法吗?还是我需要做其他事情?
答案 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.所以没关系,但可能没什么帮助。