次の方法で共有


ICorProfilerCallback2::SurvivingReferences メソッド

非圧縮ガベージ コレクションを実行した後の、ヒープ内のオブジェクトのレイアウトを報告します。

構文

HRESULT SurvivingReferences(  
    [in] ULONG  cSurvivingObjectIDRanges,  
    [in, size_is(cSurvivingObjectIDRanges)] ObjectID  
                objectIDRangeStart[] ,  
    [in, size_is(cSurvivingObjectIDRanges)] ULONG  
                cObjectIDRangeLength[] );  

パラメーター

cSurvivingObjectIDRanges
[in] 非圧縮ガベージ コレクションを実行した後に存続する、隣接したオブジェクトのブロック数。 つまり、cSurvivingObjectIDRanges の値は、objectIDRangeStart 配列と cObjectIDRangeLength 配列のサイズを表します。これらの配列にはそれぞれ、オブジェクトの各ブロックの ObjectID と長さが格納されます。

SurvivingReferences の次の2個の引数は並列配列です。 つまり、objectIDRangeStartcObjectIDRangeLength は隣接するオブジェクトの同じブロックを対象としています。

objectIDRangeStart
[in] それぞれがメモリ内の有効な隣接オブジェクト ブロックの開始アドレスを表す、ObjectID 値の配列。

cObjectIDRangeLength
[in] それぞれがメモリ内に存続する隣接オブジェクト ブロックのサイズを表す、整数の配列。

サイズは、objectIDRangeStart 配列内の参照される各ブロックに対して指定します。

解説

重要

このメソッドは、64 ビット プラットフォームで 4 GB より大きいオブジェクトのサイズを MAX_ULONG として報告します。 4 GB より大きいオブジェクトの場合は、代わりに ICorProfilerCallback4::SurvivingReferences2 メソッドを使用します。

objectIDRangeStart 配列と cObjectIDRangeLength 配列の要素は、次のように解釈されて、ガベージ コレクションでオブジェクトが存続したかどうかを判断する必要があります。 ObjectID 値 (ObjectID) が次の範囲内にあるとします。

ObjectIDRangeStart[i]<= ObjectID<ObjectIDRangeStart[i] + cObjectIDRangeLength[i]

次の範囲内にある i のすべての値について、オブジェクトはガベージ コレクションの実行後に存続しています。

0 <= i<cSurvivingObjectIDRanges

非圧縮ガベージ コレクションは、"無効な" オブジェクトによって占有されているメモリをクリアしますが、解放された領域は圧縮しません。 そのため、メモリはヒープに返されますが、"有効な" オブジェクトは移動されません。

共通言語ランタイム (CLR: Common Language Runtime) は、非圧縮ガベージ コレクションに対して SurvivingReferences を呼び出します。 圧縮ガベージ コレクションの場合には、代わりに ICorProfilerCallback::MovedReferences が呼び出されます。 単一のガベージ コレクションで 1 つのジェネレーションを圧縮できますが、その他のジェネレーションは非圧縮になります。 どの特定のジェネレーションのガベージ コレクションについても、プロファイラーは SurvivingReferences コールバックと MovedReferences コールバックのいずれかを受け取り、両方を受け取ることはありません。

特定のガベージ コレクションで複数の SurvivingReferences コールバックを受け取ることがあります。この原因としては、内部バッファリングの制限、サーバーのガベージ コレクション中の複数のコールバックなどが考えられます。 あるガベージ コレクションで複数のコールバックが生じる場合、情報が累積されます。つまり、SurvivingReferences コールバックで報告されるすべての参照は対象のガベージ コレクション後も存続します。

必要条件

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

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

ライブラリ: CorGuids.lib

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

関連項目