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