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
[入力] keyRefIds
、valueRefIds
および 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 以降で使用可能
関連項目
.NET