1

以前の質問で、LOH で割り当て可能な最大ブロックを最大化するプログラム的な方法を尋ねました。まだ問題が発生していますが、LOH のサイズが大きくなったり小さくなったりする理由を理解しようとしていますが、LOH の断片化が原因であると他の人が報告したものと一致する OutOfMemoryExceptions がまだ見られます。 .

たとえば、StringBuilder.EnsureCapacity を呼び出すと OutOfMemoryException がスローされるのに、別の場所から別の呼び出しを行うと LOH のサイズが拡大するのはなぜですか (パフォーマンス カウンターによると、拡大と縮小が繰り返されます)。

4

2 に答える 2

2

よくわかりませんが、2つの方法を試します:

  1. アプリケーションで割り当てられたアンマネージ メモリをチェックし、GC.AddMemoryPressure メソッドを使用して、これをより適切に処理するようにメモリ管理に指示します。
  2. 大きな割り当て呼び出しの前に MemoryFailPoint クラスを使用してください。そこでは、アプリケーションの大きなブームを回避するチャンスがあります。いくつかのリソースを解放して、もう一度試してください。

編集: 3 番目の方法は、より多くの appdomain を作成し、その余分な appdomain でその大きなものを処理することです。

于 2010-05-28T15:01:58.737 に答える
0

私は元の記事に行き、そこにあなたの問題であると思われるものを投稿しました. それをチェックしてください。

于 2010-06-03T13:50:50.777 に答える