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

时间:2010-05-28 14:36:48

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

在之前的一个问题中,我问possible programatic ways of maximising the largest block allocatable on the LOH。我仍然看到了这些问题,但现在我正试图弄清楚为什么LOH看起来会变大和缩小,但我仍然看到OutOfMemoryExceptions与其他人报道的由于LOH碎片的结果相符。

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

2 个答案:

答案 0 :(得分:2)

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

  1. 检查应用程序中已分配的非托管内存,并使用GC.AddMemoryPressure方法告诉内存管理员更好地处理此问题。
  2. 在大分配调用之前使用MemoryFailPoint类。在那里你有机会避免你的应用程序大爆炸。发布一些资源并再试一次。
  3. 编辑:第三种方式可能是创建更多appdomains并处理额外appdomains中的那些重要内容。

答案 1 :(得分:0)

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