.net集合内存优化 - 这种方法会起作用吗?

pro*_*mer 5 .net c# collections performance

就像几乎任何其他大型.NET应用程序一样,我当前的C#项目包含许多.net集合.
有时我从一开始就不知道Collection(List/ObservableCollection/Dictionary/etc.)的大小是多少.
但是很多时候我确实知道它会是什么.

我经常得到一个,OutOfMemoryException并且我被告知它不仅可能因为流程大小限制而且还因为碎片而发生.

所以我的问题是 - 每当我知道它的预期大小帮助我防止至少一些碎片问题时,将设置集合的大小(使用构造函数中的capacity参数)吗?

这句话来自msdn:

如果可以估计集合的大小,则指定初始容量消除了在向List添加元素的同时执行大量调整大小操作的需要.

但是,我仍然不想开始更改我的代码的大部分内容,因为这可能不是真正的问题.

它有没有帮助你们解决内存不足的问题?

Ali*_*tad 3

指定初始大小很少会消除 OutOfMemory 问题 - 除非您的集合大小是数百万个对象,在这种情况下您实际上不应该保留这样的集合。

调整集合的大小涉及定义一个具有新的附加大小的全新数组,然后复制内存。如果您已经接近内存不足,是的,这可能会导致内存不足,因为无法分配新数组。

然而,百分之九十九的应用程序都存在内存泄漏,而集合调整大小问题只是其中的一个症状。

  • @程序员确实,@Aliostad 提出了一个非常有效的观点。作为参考,**95%** 在我遇到(感知到的)内存泄漏的情况下,结果证明这是一个我没有取消订阅的事件,这导致对象保留在图中。 (2认同)