ICorProfilerCallback::MovedReferences メソッド
圧縮ガベージ コレクションを実行した後の、ヒープ内のオブジェクトの新しいレイアウトを報告するために呼び出されます。
構文
HRESULT MovedReferences(
[in] ULONG cMovedObjectIDRanges,
[in, size_is(cMovedObjectIDRanges)] ObjectID oldObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ObjectID newObjectIDRangeStart[] ,
[in, size_is(cMovedObjectIDRanges)] ULONG cObjectIDRangeLength[] );
パラメーター
cMovedObjectIDRanges
[in] 圧縮ガベージ コレクションを実行した後に移動される、隣接したオブジェクトのブロック数。 つまり、cMovedObjectIDRanges
の値は oldObjectIDRangeStart
、newObjectIDRangeStart
、および cObjectIDRangeLength
配列の合計サイズです。
MovedReferences
の次の 3 つの引数は並列配列です。 つまり、oldObjectIDRangeStart[i]
、newObjectIDRangeStart[i]
、cObjectIDRangeLength[i]
はすべて、隣接するオブジェクトの同じブロックを対象としています。
oldObjectIDRangeStart
[in] それぞれがメモリ内の有効な隣接オブジェクト ブロックの古い (ガベージ コレクション実行前の) 開始アドレスを表す、ObjectID
値の配列。
newObjectIDRangeStart
[in] それぞれがメモリ内の有効な隣接オブジェクト ブロックの新しい (ガベージ コレクション実行後の) 開始アドレスを表す、ObjectID
値の配列。
cObjectIDRangeLength
[in] それぞれがメモリ内の隣接オブジェクト ブロックのサイズを表す、整数の配列。
サイズは、oldObjectIDRangeStart
および newObjectIDRangeStart
配列内の参照される各ブロックに対して指定します。
解説
重要
このメソッドは、64 ビット プラットフォームで 4 GB より大きいオブジェクトのサイズを MAX_ULONG
として報告します。 4 GB より大きいオブジェクトのサイズを取得するには、代わりに ICorProfilerCallback4::MovedReferences2 メソッドを使用してください。
圧縮ガベージ コレクターは、無効なオブジェクトによって占有されているメモリを解放し、解放された領域を圧縮します。 その結果、ヒープ内で有効なオブジェクトが移動され、以前の通知で配布された ObjectID
の値が変更されることがあります。
既存の ObjectID
の値 (oldObjectID
) が次の範囲内にあるとします。
oldObjectIDRangeStart[i]
<= oldObjectID
<oldObjectIDRangeStart[i]
+ cObjectIDRangeLength[i]
この場合、範囲の開始からオブジェクトの開始までのオフセットは次のとおりです。
oldObjectID
- oldObjectRangeStart[i]
i
の値が次の範囲内にあるとします。
0 <= i
<cMovedObjectIDRanges
この場合、新しい ObjectID
は次のように計算できます。
newObjectID
= newObjectIDRangeStart[i]
+ (oldObjectID
– oldObjectIDRangeStart[i]
)
ガーベッジ コレクションでオブジェクトが古い場所から新しい場所へ移動中の可能性があるため、コールバックの間は MovedReferences
によって渡される ObjectID
値はすべて無効です。 このため、MovedReferences
呼び出しの間、プロファイラーはオブジェクトを検査するべきではありません。 ICorProfilerCallback2::GarbageCollectionFinished コールバックは、すべてのオブジェクトが新しい場所に移動され、検査を実行できることを示します。
必要条件
:「システム要件」を参照してください。
ヘッダー : CorProf.idl、CorProf.h
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 2.0 以降で使用可能
関連項目
.NET