ICorProfilerInfo2::GetGenerationBounds メソッドICorProfilerInfo2::GetGenerationBounds Method

各種ガベージ コレクション ジェネレーションを構成するメモリ領域 (ヒープのセグメント) を取得します。Gets the memory regions, which are segments of the heap, that make up the various garbage collection generations.


HRESULT GetGenerationBounds(  
    [in]  ULONG cObjectRanges,  
    [out] ULONG *pcObjectRanges,  
    [out, size_is(cObjectRanges), length_is(*pcObjectRanges)] COR_PRF_GC_GENERATION_RANGE ranges[]);  


[in] ranges 配列の呼び出し元によって割り当てられた要素の数。[in] The number of elements allocated by the caller for the ranges array.

[out] その一部または全部が ranges 配列で返される範囲の総数を指定する整数へのポインター。[out] A pointer to an integer that specifies the total number of ranges, some or all of which will be returned in the ranges array.

入出力COR_PRF_GC_GENERATION_RANGE構造体の配列。それぞれがガベージコレクションを行っているジェネレーション内のメモリの範囲 (つまり、ブロック) を記述します。[out] An array of COR_PRF_GC_GENERATION_RANGE structures, each of which describes a range (that is, block) of memory within the generation that is undergoing garbage collection.


ガベージ コレクションを処理中でない場合、GetGenerationBounds メソッドは任意のプロファイラー コールバックから呼び出すことができます。The GetGenerationBounds method can be called from any profiler callback, provided that garbage collection is not in progress.

通常、ジェネレーションの移動はガベージ コレクション中に行われます。Most shifting of generations takes place during garbage collections. コレクションの間にジェネレーションが増大する可能性はありますが、一般的に移動はありません。Generations might grow between collections but generally do not move around. したがって、GetGenerationBounds を呼び出す上で最も注目すべき地点は ICorProfilerCallback2::GarbageCollectionStartedICorProfilerCallback2::GarbageCollectionFinished の間です。Therefore, the most interesting places to call GetGenerationBounds are in ICorProfilerCallback2::GarbageCollectionStarted and ICorProfilerCallback2::GarbageCollectionFinished.

プログラムの起動中に、いくつかのオブジェクトが共通言語ランタイム (CLR) 自体によって割り当てられます。これは、一般的にはジェネレーションの 3 と 0 で行われます。During program startup, some objects are allocated by the common language runtime (CLR) itself, generally in generations 3 and 0. したがって、マネージド コードが実行を開始するまでに、これらのジェネレーションには既にオブジェクトが含まれています。Thus, by the time managed code starts executing, these generations will already contain objects. 通常、ジェネレーションの 1 と 2 は、ガベージ コレクターによって生成されたダミー オブジェクトを除き、空です。Generations 1 and 2 will normally be empty, except for dummy objects that are generated by the garbage collector. (ダミーオブジェクトのサイズは、CLR の32ビット実装では12バイトです。64ビットの実装では、サイズは大きくなります)。また、ネイティブイメージジェネレーター (Ngen.exe) によって生成されたモジュール内にあるジェネレーション2の範囲が表示される場合もあります。(The size of dummy objects is 12 bytes in 32-bit implementations of the CLR; the size is larger in 64-bit implementations.) You might also see generation 2 ranges that are inside modules produced by the Native Image Generator (NGen.exe). この場合、ジェネレーション2のオブジェクトは固定されたオブジェクトであり、ガベージコレクターではなく ngen.exe が実行されるときに割り当てられます。In this case, the objects in generation 2 are frozen objects, which are allocated when NGen.exe runs rather than by the garbage collector.

この関数は、呼び出し元が割り当てたバッファーを使用します。This function uses caller-allocated buffers.


:システム要件」を参照してください。Platforms: See System Requirements.

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

ライブラリ: CorGuids.libLibrary: CorGuids.lib

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

関連項目See also