C# .net の特定のモジュールに対して GC によって割り当てられ、割り当て解除され、取得されたメモリの量を追跡する方法はありますか?
モジュールで発生する可能性のあるメモリ リークを追跡したいと考えています。本番環境で時折システムのメモリ不足例外が発生します。
C# .net の特定のモジュールに対して GC によって割り当てられ、割り当て解除され、取得されたメモリの量を追跡する方法はありますか?
モジュールで発生する可能性のあるメモリ リークを追跡したいと考えています。本番環境で時折システムのメモリ不足例外が発生します。
メモリ割り当てをプロファイリングするには、メモリ プロファイラを使用する必要があります。
私はJetBrains dotTraceを使用しました。これには、異なる時間に 2 つのスナップショットを取得し、それらの 2 つのスナップショット間で割り当てられたが収集されなかったオブジェクトを表示する優れたモードがあります。新しいインスタンスを割り当て続け、それらを収集しないメモリ リークを簡単に見つけることができます。
2 つのアプリケーション メモリ状態の違いを表示するには、時間間隔の開始と終了をマークし、マークされた時間間隔中に割り当てられ、解放されたメモリの量を示す差分スナップショットをキャプチャします。ビューをフィルタリングして、ライブ、新規、またはデッド オブジェクトのみを表示したり、新規オブジェクトとデッド オブジェクトの違いを表示したりできます。
Visual Studio で .NET メモリ割り当てプロファイリングを試すことができます。この msdn の記事を試して、 http://blogs.msdn.com/b/dotnet/archive/2013/04/04/net-memory-allocation-profiling-with-visual-studio-2012.aspxの方法を示してください。この記事の約 1/3 では、.NET メモリ割り当てプロファイラーを実行する方法が示されています。