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::GarbageCollectionStartedICorProfilerCallback2::GarbageCollectionFinished の間で発生するものを除く任意のコールバックから呼び出すことができます。

通常、ジェネレーションの移動はガベージ コレクション中に行われます。 コレクションの間にジェネレーションが増大する可能性はありますが、一般的に移動はありません。 したがって、GetGenerationBounds を呼び出す場合は、ICorProfilerCallback2::GarbageCollectionStartedICorProfilerCallback2::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

参照

参照

ICorProfilerInfo インターフェイス

ICorProfilerInfo2 インターフェイス

その他の技術情報

プロファイリングのインターフェイス

プロファイル (アンマネージ API リファレンス)