私はこの分野の専門家ではありませんが、興味深いものを監視するために.NETランタイムのパフォーマンスカウンタを使用できることに気付きました.1つはガベージコレクタによって割り当てられたバイト数ですそれが最後のコレクションの間に。 Allocated Bytes/second
Performance Counters in the .NET Frameworkにおける状態の 説明:
は、ガベージコレクションのヒープに割り当てられた1秒あたりのバイト数を表示します。このカウンタは、すべてのガベージコレクションの最後に更新され、各割り当てでは更新されません。このカウンタは時間の経過と共に平均値ではありません。最後の2つのサンプルで観測された値の差をサンプル間隔の継続時間で割った値を表示します。
あなたは1秒にパフォーマンスモニタの更新間隔を設定し、Allocated Bytes/second
のための指標をよく見て取れば私のテストによると、収集が完了した後に0
の値を示しているようです。コレクションが進行中であるかどうかにかかわらず、この値から導き出すことができます。
VS 2015の小さなアプリケーションを作成して確認しました。このアプリケーションでは、ガベージコレクションが進行中かどうかを表示できます。その場合、指標の値は0とは異なっていた。
更新(感謝トーマス)
パフォーマンスカウンタを監視するためのProcDumpを使用して、自動化された方法でダンプを作成することが可能です。 これを行う正しい方法は、procdump ProcessName -s 1 -ma -pl "\.NET CLR Memory(ProcessName)\Allocated Bytes/second" 1000
です。値が1000を下回ると、ダンプがトリガーされます。
ガベージコレクションが実行されていない場合、値がゼロになるため、これは機能するはずです。
オペレーティングシステムの英語版で動作していない場合は、パフォーマンスカウンタの正しい言語固有の名前を調べる必要があります(上記のMSDNリンクを見て、別のそこに言語)。例えば。ドイツ語の名前は 、"\.NET CLR-Speicher(ProcessName)\Zugeordnete Bytes/Sek."
となります。
この問題を考慮して設計されたPerfViewを使用できます。ヘルプ|ユーザーガイドに「GCヒープコレクション:フリーズするかどうか」というセクションがあります。これについて議論する。ダウンロードリンクは次のとおりです。http://www.microsoft.com/en-us/download/details.aspx?id=28567&hl=ja –
私の答えを実装/テストして助けが必要な場合は、私の行を削除してください。 –
@マーク:あなたのアプリケーションでは、バックグラウンドプロセスはありますか?つまり、ユーザーが使用していない場合でも、シーンの裏側で何かを処理できますか? – CharithJ