/ / GC.CollectコールとOutOfMemory - .net、ガベージコレクション、メモリ不足

GC.Collect呼び出しとOutOfMemory - .net、ガベージコレクション、メモリ不足

GC.Collectを呼び出すと、すべて正常に動作します。しかし、私はこの呼び出しをコメントする場合、私は時間からOutOfMemoryを受信します。非常に奇妙に見えます。 このバグを見つけるには?

追加情報 Application sulutionには、2.0から4.0までのさまざまなフレームワークへの参照を持ついくつかのプロジェクトがあります アプリケーションはWindowsフォームアプリケーションで、devexpressが使用されます。

回答:

回答№1は2

最も可能性の高いバリアント:

  1. ラージオブジェクトヒープフラグメンテーション このアプリケーションでは、HashSetやDictionaryなど、100万までの大きなサイズのコレクションの非常に大きな量が使用されます。それらのすべては、時々Array.Resizeを呼び出します。だから、GC.Collectはプロンプトを解決せず、断片化を遅らせるだけです。
  2. アンマネージコード

編集: 3. System.DrawingはOOM例外をスローする傾向があります


回答№2の場合は1

あなたはおそらくオブジェクトを処分することを忘れています。データベースや他の外部リソースを使用していますか?


回答№3の場合は1

GC.Collectを呼び出さなければならない場合、何かが間違っています。通常、ガベージコレクタを呼び出す必要はありません。

  1. メモリプロファイラを試してみてください。これは、あなたのヒープを消費するタイプのオブジェクトの数を示します。
  2. 管理されていないリソースを確認してください。すべての管理されていないリソースは、ファイナライザとともにIDispoableを実装するクラスによって管理されなければなりません。

回答№4の場合は0

.netのメモリリークをデバッグする一般的な方法は、 SOS - 拡張(いくつかのチュートリアルがあります。 この あなたがいくつかの研究をする場合)、またはメモリプロファイラを使用する この 1。 Mabyは管理されていないリソースを解放(廃棄)することを忘れていますか?


回答№5の場合は0

私は管理されたメモリの問題をデバッグしようとします。 CLRプロファイラ.

さらに、GC.Collect()を自分で呼び出しているのはなぜですか?これは通常、アンチパターンです。