1
  1. dumpheap -type MyObjectTypeのメソッド テーブルを取得するコマンドを実行しますMyObjectType。ヒープ上に 3 つのオブジェクトが表示されます。
  2. アドレスを取得するために実行dumpheap -mt <method table address>します。
  3. !gcroot <address>これらのオブジェクトへの参照を見つけるコマンドを実行しましたが、何も見つかりませんでした
  4. !do <address>このオブジェクトのフィールドなどの詳細を提供します。

オブジェクトを参照または使用しているスレッドを見つけるにはどうすればよいですか? それを見つけるためのコマンドはありますか?

4

2 に答える 2

1

!dsoこれを行う簡単な方法はありませんが、スレッドごとに実行できます (つまり~*!dso)。これにより、各スレッドが参照するオブジェクトがわかります。出力をナビゲートしやすくするために、通常は出力をファイルに記録し、grep または適切なテキスト エディターを使用して結果を検索します。

于 2011-12-01T15:46:01.877 に答える
0

Microsoft の CLR Profilerを使用して、どのスレッドがオブジェクトを割り当ててアクセスしたかを調べることができます。!gcrootファイナライザーを待っているオブジェクトを表示するかどうかはわかりませんが、CLR プロファイラーは確実に表示します。また、オブジェクトが GC ルートからまったく参照されておらず、コレクションが発生するのを待っているだけの場合もあります。特に LOB ヒープに割り当てられている場合は、かなりの時間がかかることがあります。いくつかの GC を強制して (そして gen0-2 コレクションが実際に行われたかどうかを確認して)、オブジェクトが存続するかどうかを確認してください。

于 2011-11-29T18:56:47.740 に答える