次の方法で共有


ICorProfilerInfo2::GetGenerationBounds メソッド

更新 : 2007 年 11 月

各種ガベージ コレクション ジェネレーションを構成するメモリ領域 (ヒープのセグメント) を取得します。

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

ライブラリ : CorGuids.lib

.NET Framework のバージョン : 3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

参照

参照

ICorProfilerInfo

ICorProfilerInfo2

その他の技術情報

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

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