ICorProfilerInfo2::GetGenerationBounds メソッド
各種ガベージ コレクション ジェネレーションを構成するメモリ領域 (ヒープのセグメント) を取得します。
構文
HRESULT GetGenerationBounds(
[in] ULONG cObjectRanges,
[out] ULONG *pcObjectRanges,
[out, size_is(cObjectRanges), length_is(*pcObjectRanges)] COR_PRF_GC_GENERATION_RANGE ranges[]);
パラメーター
cObjectRanges
[in] ranges
配列の呼び出し元によって割り当てられた要素の数。
pcObjectRanges
[out] その一部または全部が ranges
配列で返される範囲の総数を指定する整数へのポインター。
ranges
[out] COR_PRF_GC_GENERATION_RANGE 構造体の配列。それぞれがガベージ コレクションを実行しているジェネレーション内のメモリの範囲 (ブロック) を記述します。
解説
ガベージ コレクションを処理中でない場合、GetGenerationBounds
メソッドは任意のプロファイラー コールバックから呼び出すことができます。
通常、ジェネレーションの移動はガベージ コレクション中に行われます。 コレクションの間にジェネレーションが増大する可能性はありますが、一般的に移動はありません。 したがって、GetGenerationBounds
を呼び出す上で最も注目すべき地点は ICorProfilerCallback2::GarbageCollectionStarted
と ICorProfilerCallback2::GarbageCollectionFinished
の間です。
プログラムの起動中に、いくつかのオブジェクトが共通言語ランタイム (CLR) 自体によって割り当てられます。これは、一般的にはジェネレーションの 3 と 0 で行われます。 したがって、マネージド コードが実行を開始するまでに、これらのジェネレーションには既にオブジェクトが含まれています。 通常、ジェネレーションの 1 と 2 は、ガベージ コレクターによって生成されたダミー オブジェクトを除き、空です。 (ダミー オブジェクトのサイズは、CLR の 32 ビット実装で 12 バイト、64 ビット実装ではそれよりも大きくなります。)ジェネレーション 2 の範囲がネイティブ イメージ ジェネレーター (NGen.exe) によって作成されたモジュール内のこともあります。 この場合、ジェネレーション 2 のオブジェクトは "固定オブジェクト であり、ガベージ コレクターではなく、NGen.exe 実行時に割り当てられます。
この関数は、呼び出し元が割り当てたバッファーを使用します。
必要条件
:「システム要件」を参照してください。
ヘッダー : CorProf.idl、CorProf.h
ライブラリ: CorGuids.lib
.NET Framework のバージョン: 2.0 以降で使用可能
関連項目
.NET