List <string>在C#中抛出OutOfMemoryException

时间:2017-02-16 16:49:06

标签: c# generics arraylist

在一个循环中,我将一百万个字符串(大多数是2到3个字符长)添加到List<string>。在每次迭代结束时,清除字符串列表。大多数迭代都没有遇到麻烦。但是在一个特定的迭代中,字符串列表抛出OutOfMemoryException,即使其中只有700,000个字符串元素。我不知道为什么会这样,以及如何解决它。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

由于您还没有提供任何可供人们查看的代码,因此很难识别,但这是OutOfMemoryException的原因:

来自MSDN的详细信息。

  • 您正在尝试将StringBuilder对象扩展到其StringBuilder.MaxCapacity属性定义的长度之外。

  • 公共语言运行库无法分配足够的连续内存来成功执行操作。任何需要内存分配的属性赋值或方法调用都可以抛出此异常。

有关OutOfMemoryException异常原因的详细信息,请参阅https://blogs.msdn.microsoft.com/ericlippert/2009/06/08/out-of-memory-does-not-refer-to-physical-memory/

答案 1 :(得分:0)

这应远小于列表的理论最大大小。但是,List类使用数组作为底层存储,因此它将所有内容存储在连续的内存位置中。如果您的内存高度碎片化,则可能没有足够的连续内存位置。