在一个循环中,我将一百万个字符串(大多数是2到3个字符长)添加到List<string>
。在每次迭代结束时,清除字符串列表。大多数迭代都没有遇到麻烦。但是在一个特定的迭代中,字符串列表抛出OutOfMemoryException
,即使其中只有700,000个字符串元素。我不知道为什么会这样,以及如何解决它。有人可以帮忙吗?
答案 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类使用数组作为底层存储,因此它将所有内容存储在连续的内存位置中。如果您的内存高度碎片化,则可能没有足够的连续内存位置。