Share via


ICorProfilerCallback5::ConditionalWeakTableElementReferences メソッド

直接のメンバー フィールド参照および ConditionalWeakTable 依存を介してこれらのルーツによって参照されるオブジェクトの推移的終了を識別します。

構文

HRESULT ConditionalWeakTableElementReferences(
     [in]                     ULONG    cRootRefs,
     [in, size_is(cRootRefs)] ObjectID keyRefIds[],
     [in, size_is(cRootRefs)] ObjectID valueRefIds[],
     [in, size_is(cRootRefs)] GCHandleID rootIds[]
);

パラメーター

cRootRefs
[入力] keyRefIdsvalueRefIds および rootIds 配列にある要素数。

keyRefIds
[入力] それぞれが依存ハンドル ペアのプライマリ要素の ObjectID を含む、オブジェクト ID の配列。

valueRefIds
[入力] それぞれが依存ハンドル ペアのセカンダリ要素の ObjectID を含む、オブジェクト ID の配列。 (keyRefIds[i]valueRefIds[i] を有効な状態に保ちます。)

rootIds
[入力] ガーベッジ コレクション ルートについての追加情報を含む整数を指し示す GCHandleID 値の配列

ガーベッジ コレクターがオブジェクトを古い場所から新しい場所へ移動中の可能性があるため、コールバックの間は ObjectID メソッドによって返される ConditionalWeakTableElementReferences 値の値は無効です。 このため、ConditionalWeakTableElementReferences 呼び出しの間、プロファイラーはオブジェクトを検査するべきではありません。 GarbageCollectionFinished では、全てのオブジェトが新しい場所へ移動しているので、検査を行うことができます。

次のコードの例は ICorProfilerCallback5 を実装する方法とこのメソッドを使用する方法を説明します。

HRESULT Callback5Impl::ConditionalWeakTableElementReferences(
    ULONG      cRootRefs,
    ObjectID   keyRefIds[],
    ObjectID   valueRefIds[],
    GCHandleID rootIds[])
{
    printf("Callback5Impl::ConditionalWeakTableElementReferences called\n");
    for (unsigned int i = 0; i < cRootRefs; ++i)
    {
        // Save dependency to XML for later retrieval
        PersistDependencyToXml(rootIds[i], keyRefIds[i], valueRefIds[i]);
        // or store dependency to an internal map
        m_cwt_deps->add_dep(rootIds[i], keyRefIds[i], valueRefIds[i]);
        // or add arc to object graph
        m_obj_graph->add_arc(keyRefIds[i], valueRefIds[i], rootIds[i]);
    }
    return S_OK;
}

解説

.NET Framework 4.5 またはそれ以降のバージョンのプロファイラーは、ICorProfilerCallback5 インターフェイスを実装し、ConditionalWeakTableElementReferences メソッドによって指定される依存を記録します。 ICorProfilerCallback5 は、ConditionalWeakTable エントリによって表されるライブ オブジェクト間の依存の完全なセットを提供します。 これらの依存、および ICorProfilerCallback::ObjectReferences メソッドによって指定されるメンバー フィールド参照によって、マネージド プロファイラーがライブ オブジェクトの完全オブジェクト グラフを生成することができます。

要件

:システム要件」を参照してください。

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

.NET Framework のバージョン: 4.5 以降で使用可能

関連項目