ICorProfilerCallback4::SurvivingReferences2 メソッド
非圧縮ガベージ コレクションを実行した後の、ヒープ内のオブジェクトのレイアウトを報告します。 このメソッドは、プロファイラーが ICorProfilerCallback4 インターフェイスを実装している場合に呼び出されます。 このコールバックによって、ICorProfilerCallback2::SurvivingReferences メソッドが置き換えられます。ULONG で表現できる内容を超える長さの、より大きなオブジェクト範囲を報告できるためです。
構文
HRESULT SurvivingReferences2(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID
objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] SIZE_T
cObjectIDRangeLength[] );
パラメーター
cSurvivingObjectIDRanges
[in] 非圧縮ガベージ コレクションを実行した後に存続する、隣接したオブジェクトのブロック数。 つまり、cSurvivingObjectIDRanges
の値は、objectIDRangeStart
配列と cObjectIDRangeLength
配列のサイズを表します。これらの配列にはそれぞれ、オブジェクトの各ブロックの ObjectID
と長さが格納されます。
SurvivingReferences2
の次の2個の引数は並列配列です。 つまり、objectIDRangeStart
と cObjectIDRangeLength
は隣接するオブジェクトの同じブロックを対象としています。
objectIDRangeStart
[in] それぞれがメモリ内の有効な隣接オブジェクト ブロックの開始アドレスを表す、ObjectID
値の配列。
cObjectIDRangeLength
[in] それぞれがメモリ内に存続する隣接オブジェクト ブロックのサイズを表す、整数の配列。
サイズは、objectIDRangeStart
配列内の参照される各ブロックに対して指定します。
解説
objectIDRangeStart
配列と cObjectIDRangeLength
配列の要素は、次のように解釈されて、ガベージ コレクションでオブジェクトが存続したかどうかを判断する必要があります。 ObjectID
値 (ObjectID
) が次の範囲内にあるとします。
ObjectIDRangeStart[i]
<= ObjectID
<ObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
次の範囲内にある i
のすべての値について、オブジェクトはガベージ コレクションの実行後に存続しています。
0 <= i
<cSurvivingObjectIDRanges
非圧縮ガベージ コレクションは、"無効な" オブジェクトによって占有されているメモリをクリアしますが、解放された領域は圧縮しません。 そのため、メモリはヒープに返されますが、"有効な" オブジェクトは移動されません。
共通言語ランタイム (CLR: Common Language Runtime) は、非圧縮ガベージ コレクションに対して SurvivingReferences2
を呼び出します。 圧縮ガベージ コレクションの場合には、代わりに MovedReferences2 が呼び出されます。 単一のガベージ コレクションで 1 つのジェネレーションを圧縮できますが、その他のジェネレーションは非圧縮になります。 どの特定のジェネレーションのガベージ コレクションについても、プロファイラーは SurvivingReferences2
コールバックと MovedReferences2 コールバックのいずれかを受け取り、両方を受け取ることはありません。
特定のガベージ コレクションで複数の SurvivingReferences2
コールバックを受け取ることがあります。この原因としては、内部バッファリングの制限、サーバーのガベージ コレクション中の複数のコールバックなどが考えられます。 あるガベージ コレクションで複数のコールバックが生じる場合、情報が累積されます。つまり、SurvivingReferences2
コールバックで報告されるすべての参照は対象のガベージ コレクション後も存続します。
プロファイラーが ICorProfilerCallback インターフェイスと ICorProfilerCallback4 インターフェイスを実装すると、SurvivingReferences2
が正常に返される場合のみ、SurvivingReferences2
メソッドは ICorProfilerCallback2::SurvivingReferences メソッドの前に呼び出されます。 プロファイラーは HRESULT を返すことがあり、これは SurvivingReferences2
メソッドの失敗を示し、2 番目のメソッドが呼び出されません。
必要条件
:「システム要件」を参照してください。
ヘッダー : CorProf.idl、CorProf.h
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 4.5 以降で使用可能
関連項目
.NET