次の方法で共有


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 の値は oldObjectIDRangeStartnewObjectIDRangeStart、および 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] + (oldObjectIDoldObjectIDRangeStart[i])

ガーベッジ コレクションでオブジェクトが古い場所から新しい場所へ移動中の可能性があるため、コールバックの間は MovedReferences によって渡される ObjectID 値はすべて無効です。 このため、MovedReferences 呼び出しの間、プロファイラーはオブジェクトを検査するべきではありません。 ICorProfilerCallback2::GarbageCollectionFinished コールバックは、すべてのオブジェクトが新しい場所に移動され、検査を実行できることを示します。

必要条件

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

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

ライブラリ: CorGuids.lib

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

関連項目