CLR プロファイラー - 既存のプロセスへのアタッチ
質問
.Net 2.0 の CLR プロファイルのようなものを使用して、(ASP.Net ワーカー プロセスの) ヒープ内で常にどのオブジェクトがより多くのスペースを占有しているかを確認したいと考えています。
ただし、CLR Profiler ではアプリの起動のみが可能で、既存のアプリにアタッチすることはできません。これは割り当てと GC も追跡しているためだと思いますが、私はそれにはあまり興味がありません。ヒープの現在の状態のスナップショットを取得し、そこに何があるか、各種類のオブジェクトが何個あるか、各オブジェクト タイプで合計何バイトが使用されているかを表示するものが欲しいのです。
何か案は?
解決
.Netメモリプロファイラー まさにあなたが必要としているものです。無料ではありませんが、試用版があります。実際、私は最後のプロジェクトでリークを見つけるためにトライアルを使用しました。注目すべき機能の 1 つは次のとおりです。
.NETメモリのスナップショットを収集して比較することで、メモリリークを簡単に識別します
これがあなたが探しているものだと思います。
他のヒント
- デバッガを接続する
cdb -p
- .netデバッガー拡張機能をロードする
.loadby sos mscorwks
- CLRProfiler が理解できる形式でヒープをダンプします。
!TraverseHeap ヒープ.txt
- デバッガを切り離す
qd
- clrprofiler アプリに heap.txt をロードします
この記事は MSDN からのものです 無料の CLR Profiler を使用してスタックのインスタンスと比較する方法について説明します。現在、実行中のプロセスに CLR Profiler を接続できないのは正しいことですが (その理由については記事で説明しています)、価値があるものであれば、すぐに接続できるようになるようです。
RedGates .NET Profiler を見たことがありますか?
これを使用してからしばらく経ちましたが、いつでもどの CLR プロセスにも接続できるとは確信が持てません。