【问题标题】:Why might the Large Object Heap grow rather than throw an exception?为什么大对象堆会增长而不是抛出异常?
【发布时间】:2010-05-28 14:36:47
【问题描述】:

在上一个问题中我问过possible programatic ways of maximising the largest block allocatable on the LOH。我仍然看到问题,但现在我试图弄清楚为什么 LOH 的大小似乎会增长和缩小,但我仍然看到 OutOfMemoryExceptions 与其他人报告的由于 LOH 碎片化的情况相符.

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

【问题讨论】:

    标签: c# .net memory-management fragmentation large-object-heap


    【解决方案1】:

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

    1. 检查应用程序中分配的非托管内存并使用 GC.AddMemoryPressure 方法告诉内存管理更好地处理此问题。
    2. 在大分配调用之前使用 MemoryFailPoint 类。在那里你有机会避免你的应用程序的大繁荣。释放一些资源,然后再试一次。

    编辑:第三种方法可能是创建更多的应用程序域并在额外的应用程序域中处理那些大的东西。

    【讨论】:

      【解决方案2】:

      我去了原始文章并在那里发布了我认为可能是您的问题。去看看吧。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-29
        • 2011-09-16
        相关资源
        最近更新 更多