次の方法で共有


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::GarbageCollectionStartedICorProfilerCallback2::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 以降で使用可能

関連項目