1

在上一个问题中,我询问了最大化 LOH 上可分配的最大块的可能编程方法。我仍然看到问题,但现在我试图弄清楚为什么 LOH 的大小似乎会增长和缩小,但我仍然看到 OutOfMemoryExceptions 与其他人报告的由于 LOH 碎片化的情况相符.

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

4

2 回答 2

2

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

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

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

于 2010-05-28T15:01:58.737 回答
0

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

于 2010-06-03T13:50:50.777 回答