次の方法で共有


ICorProfilerCallback2::SurvivingReferences メソッド

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

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

パラメーター

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

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

  • objectIDRangeStart
    [入力] それぞれがメモリ内に存在する隣接したオブジェクトのブロックの開始アドレスを表す、ObjectID 値の配列。

  • cObjectIDRangeLength
    [入力] それぞれがメモリ内に残される隣接したオブジェクトのブロックのサイズを表す、整数の配列。

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

解説

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 コールバックで報告されるすべての参照が、ガベージコレクション終了後に残されます。

必要条件

プラットフォーム: 「.NET Framework システム要件」を参照

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

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

参照

参照

ICorProfilerCallback インターフェイス

ICorProfilerCallback2 インターフェイス

概念

プロファイル API でのオブジェクト追跡