代码之家  ›  专栏  ›  技术社区  ›  Unsliced

为什么大型对象堆会增长而不是抛出异常?

  •  1
  • Unsliced  · 技术社区  · 14 年前

    在上一个问题中,我问了 possible programatic ways of maximising the largest block allocatable on the LOH . 我仍然看到了这些问题,但现在我正试图弄明白为什么loh似乎在扩大和缩小,但我仍然看到了内存不足的例外,这与其他人所说的loh碎片造成的情况相符。

    为什么一个调用(例如,StringBuilder.EnsureCapacity)会为我抛出一个OutOfMemoryException,而另一个来自其他地方的调用会导致LOH的大小扩大(根据性能计数器,它正在增长和收缩)?

    2 回复  |  直到 13 年前
        1
  •  2
  •   Jack    14 年前

    我不确定,但我会尝试两种方法:

    1. 检查应用程序中是否分配了非托管内存,并使用gc.addmemoryPressure方法告诉memoryManagement更好地处理这一问题。
    2. 在大的分配调用之前使用memoryfailpoint类。在这里,您有机会避免应用程序出现大繁荣。释放一些资源,然后再试一次。

    编辑:第三种方法可能是创建更多的AppDomain,并在额外的AppDomain中处理那些大问题。

        2
  •  0
  •   Flory    14 年前

    我看了原始的文章,把我认为可能是你的问题贴在那里。去看看吧。

    推荐文章