【问题标题】:List<string> throws OutOfMemoryException in C# [closed]List<string> 在 C# 中抛出 OutOfMemoryException [关闭]
【发布时间】:2017-02-16 16:49:05
【问题描述】:

在一个循环中,我向List&lt;string&gt; 添加了一百万个字符串(大部分为 2 到 3 个字符长)。在每次迭代结束时,字符串列表被清除。大多数迭代都会顺利进行。但是在一次特定的迭代中,字符串列表会抛出OutOfMemoryException,即使其中只有 700,000 个字符串元素。我不知道为什么会发生这种情况以及如何解决它。任何人都可以帮忙吗?

【问题讨论】:

标签: c# generics arraylist


【解决方案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/

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 2021-05-18
      • 2015-02-28
      • 2014-09-20
      • 1970-01-01
      相关资源
      最近更新 更多