次の方法で共有


ICorProfilerCallback::ObjectReferences メソッド

指定したオブジェクトから参照されるメモリ内のオブジェクトをプロファイラーに通知します。

HRESULT ObjectReferences(
    [in]  ObjectID objectId,
    [in]  ClassID  classId,
    [in]  ULONG    cObjectRefs,
    [in, size_is(cObjectRefs)] ObjectID objectRefIds[] );

パラメーター

  • objectId
    [入力] オブジェクトを参照しているオブジェクトの ID。

  • classId
    [入力] 指定したオブジェクトがインスタンスであるクラスの ID。

  • cObjectRefs
    [入力] 指定したオブジェクトが参照するオブジェクトの数 (つまり、objectRefIds 配列内の要素の数)。

  • objectRefIds
    [入力] objectId で参照するオブジェクトの ID の配列。

解説

ObjectReferences メソッドは、ガベージ コレクションが完了した後に残っている各オブジェクトに対して呼び出されます。 このコールバックからプロファイラーがエラーを返す場合、次のガベージ コレクションが実行されるまで、プロファイル サービスによるこのコールバックの呼び出しは中断されます。

ObjectReferences コールバックを ICorProfilerCallback::RootReferences コールバックと組み合わせて使用すると、ランタイム用の完全なオブジェクト参照グラフを作成できます。 共通言語ランタイム (CLR: Common Language Runtime) では、ObjectReferences メソッドで各オブジェクト参照を 1 回のみ報告できます。

ガベージ コレクションがオブジェクトを移動中の可能性があるため、コールバック自体を処理している間に ObjectReferences から返されるオブジェクト ID は無効です。 このため、ObjectReferences 呼び出しの間、プロファイラーでオブジェクトの検査を行うことはできません。 ICorProfilerCallback2::GarbageCollectionFinished が呼び出されると、ガベージ コレクションが完了しているため正常に検査を行うことができます。

null ClassId は、objectId にアンロードしている型があることを示します。

必要条件

プラットフォーム: 「.NET Framework システム要件」を参照

ヘッダー: CorProf.idl、CorProf.h

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

参照

参照

ICorProfilerCallback インターフェイス