4

誰かがこれに光を当てることができるかどうか疑問に思っていました.

大きなメモリ フットプリント (およびメモリ チャーン) を持つアプリケーションがあります。メモリ リークはなく、GC はリソースを解放するのに適切な仕事をする傾向があります。

ただし、GC が「時間通り」に実行されず、メモリ不足の例外が発生する場合があります。誰かがこれに光を当てることができるかどうか疑問に思っていましたか?

私は REDGate プロファイラーを使用しましたが、これは非常に優れています。アプリケーションには典型的な「のこぎり」パターンがあり、OOM はのこぎり歯の上部で発生します。残念ながら、プロファイラーを使用して (AFAIK) メモリ チャーンの原因を特定することはできません。

GC を強制するメモリの「ソフト制限」を設定することはできますか? 現時点では、GC はメモリが絶対限界に達したときにのみ実行され、OOM が発生します。

4

3 に答える 3

2

ガベージ コレクションが「時間内に発生しない」ことは実際にはあり得ません。これらは、新しいメモリ割り当てによって Gen-0 が特定の制限を超えたときに発生します。したがって、メモリ割り当てによってメモリが制限を超えてプッシュされる前に、常に発生します。これは、世界中で 1 日に何度も発生しているため、よく知られていないバグがあれば驚かれることでしょう。

使用可能なメモリよりも多くのメモリを実際に割り当てている可能性があると考えたことはありますか? OS では、ほとんどの 32 ビット マシンで 2GB しかアクセスできません。

他にもいくつかの可能性があります:

  1. アプリケーションはアンマネージ メモリを使用していますか?
  2. あなたのアプリケーションはメモリをピニングしていますか? その場合、特にピンを解放していない場合、断片化の問題が発生する可能性があります。
于 2013-07-26T12:47:12.173 に答える
-1

GC.collect() を使用して、ガベージ コレクターにその作業を強制することができます。しかし、それは好ましくありません。

( memprofiler )のようなメモリ プロファイルを使用して、リークを検出します。ほとんどすべてのコードで、ある時点でリークが発生します。

于 2013-04-10T10:22:19.160 に答える