ICorProfilerInfo13::CreateHandle メソッド

指定したオブジェクトをラップするハンドルを作成します。

構文

    HRESULT CreateHandle(
                [in] ObjectID            object,
                [in] COR_PRF_HANDLE_TYPE type,
                [out] ObjectHandleID*    pHandle);

パラメーター

object
[入力] ハンドルでラップするオブジェクト参照。

type
[入力] 作成するハンドルの種類。

pHandle
[出力] 指定した object をラップするために作成されたハンドルをポイントする、呼び出し元が提供したポインター。

注釈

指定した COR_PRF_HANDLE_TYPE 値に応じて想定される使用方法を次に示します。

  • COR_PRF_HANDLE_TYPE_WEAK: オブジェクトが長時間にわたってメモリ内にとどまっている場合に監視します。 ラップされたオブジェクトが収集されている場合、ICorProfilerInfo13::GetObjectIDFromHandle は null ObjectID を返します。
  • COR_PRF_HANDLE_TYPE_STRONG: 1 つのオブジェクトが他のオブジェクトによって参照されていなくても、ガベージ コレクションでごみと判断されないように強制します。
  • COR_PRF_HANDLE_TYPE_PINNED: 強力なハンドルと同じですが、ガベージ コレクション中もオブジェクトがメモリ内の同じアドレスに確実にとどまるようにします。

object 参照が確実に有効であるようにするには、このメソッドが ICorProfilerCallback メソッド (ICorProfilerCallback::ObjectAllocated など) から呼び出される必要があります。 CreateHandle を EventPipe 非同期リスナーから呼び出すことはできません。 イベント ペイロードを介して受信したオブジェクトは、イベントが生成されてから受信されるまでの間にガベージ コレクションが発生した場合に、メモリ内で破棄または移動されている可能性があります。

作成したハンドルが不要になったら、ICorProfilerInfo13::DestroyHandle を必ず呼び出してください。 ガベージ コレクターのパフォーマンスに影響を与えないように、4096 未満のハンドルを同時に割り当てることをお勧めします。

必要条件

プラットフォーム:.NET がサポートされているオペレーティング システムに関するページを参照してください。

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

.NET バージョン: .NET 7.0 以降で使用可能

関連項目