次の方法で共有


ICorProfilerCallback2::RootReferences2 メソッド

ガベージ コレクションが発生した後のルート参照をプロファイラーに通知します。 このメソッドは、ICorProfilerCallback::RootReferences メソッドの拡張です。

構文

HRESULT RootReferences2(  
    [in] ULONG  cRootRefs,  
    [in, size_is(cRootRefs)] ObjectID rootRefIds[],  
    [in, size_is(cRootRefs)] COR_PRF_GC_ROOT_KIND rootKinds[],  
    [in, size_is(cRootRefs)] COR_PRF_GC_ROOT_FLAGS rootFlags[],  
    [in, size_is(cRootRefs)] UINT_PTR rootIds[]);  

パラメーター

cRootRefs
[in] rootRefIdsrootKindsrootFlags および rootIds 配列にある要素数。

rootRefIds
[in] 静的オブジェクトまたはスタック上のオブジェクトのいずれかをそのそれぞれが参照するオブジェクト ID の配列。 rootKinds 配列内の要素は、rootRefIds 配列内の対応する要素を分類するための情報を提供します。

rootKinds
[in] ガベージ コレクション ルートの型を示す COR_PRF_GC_ROOT_KIND 値の配列。

rootFlags
[in] ガベージ コレクション ルートのプロパティを記述する COR_PRF_GC_ROOT_FLAGS 値の配列。

rootIds
[in] rootKinds パラメーターの値に応じて、ガベージ コレクション ルートについての追加情報を含む整数を指し示す UINT_PTR 値の配列。

ルートの型がスタックの場合、ルート ID は変数を含む関数に使用されます。 そのルート ID が 0 の場合、関数は CLR 内部の名前のない関数です。 ルートの型がハンドルの場合、ルート ID はガベージ コレクション ハンドルに使用されます。 その他のルート型の場合、ID は非透過的な値であるため無視する必要があります。

解説

rootRefIdsrootKindsrootFlags、および rootIds 配列は並列配列です。 つまり、rootRefIds[i]rootKinds[i]rootFlags[i]、および rootIds[i] はすべて同じルートを考慮します。

RootReferencesRootReferences2 はどちらもプロファイラーに通知するために呼び出されます。 プロファイラーでは通常どちらか一方のメソッドが実装され、両方ではありません。これは、RootReferences2 で渡される情報は RootReferences で渡されるもののスーパーセットであるためです。

rootRefIds のエントリをゼロにすることができます。これは、対応するルート参照が null で、マネージド ヒープ上のオブジェクトを参照しないことを意味します。

RootReferences2 によって返されるオブジェクト ID はコールバック中は無効です。これは、古いアドレスから新しいアドレスへのオブジェクトの移動中にガベージ コレクションが発生する可能性があるためです。 このため、RootReferences2 呼び出しの間、プロファイラーはオブジェクトを検査するべきではありません。 ICorProfilerCallback2::GarbageCollectionFinished が呼び出されると、すべてのオブジェクトが新しい場所に移動され、安全に検査できるようになります。

必要条件

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

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

ライブラリ: CorGuids.lib

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

関連項目