更新 : 2007 年 11 月
プロファイラがサブスクライブしたイベントが発生したときにコード プロファイラに通知するために共通言語ランタイム (CLR: Common Language Runtime) が使用するメソッドを提供します。ICorProfilerCallback2 インターフェイスは、ICorProfilerCallback の機能を拡張するインターフェイスです。つまり、これは .NET Framework Version 2.0 で導入された新しいコールバックを提供します。
![]() |
---|
各メソッド実装は、S_OK (成功時) または E_FAIL (エラー時) の値を持つ HRESULT を返す必要があります。現在、CLR は、ICorProfilerCallback::ObjectReferences を除く各コールバックが返す HRESULT を無視します。 |
interface ICorProfilerCallback2 : ICorProfilerCallback
{
HRESULT ThreadNameChanged(
[in] ThreadID threadId,
[in] ULONG cchName,
[in] WCHAR name[]);
HRESULT GarbageCollectionStarted(
[in] int cGenerations,
[in, size_is(cGenerations), length_is(cGenerations)] BOOL generationCollected[],
[in] COR_PRF_GC_REASON reason);
HRESULT SurvivingReferences(
[in] ULONG cSurvivingObjectIDRanges,
[in, size_is(cSurvivingObjectIDRanges)] ObjectID objectIDRangeStart[] ,
[in, size_is(cSurvivingObjectIDRanges)] ULONG cObjectIDRangeLength[] );
HRESULT GarbageCollectionFinished();
HRESULT FinalizeableObjectQueued(
[in] DWORD finalizerFlags,
[in] ObjectID objectID);
HRESULT RootReferences2(
[in] ULONG cRootRefs,
[in, size_is(cRootRefs)] ObjectID rootRefIds[],
[in, size_is(cRootRefs)] COR_PRF_GC_ROOT_KIND rootKinds[],
[in, size_is(cRootRefs)] COR_PRF_GC_ROOT_FLAGS rootFlags[],
[in, size_is(cRootRefs)] UINT_PTR rootIds[]);
HRESULT HandleCreated(
[in] GCHandleID handleId,
[in] ObjectID initialObjectId);
HRESULT HandleDestroyed(
[in] GCHandleID handleId);
}
メソッド
メソッド |
説明 |
---|---|
ファイナライザを持つオブジェクトが、その Finalize メソッドを実行するためのファイナライザ スレッドのキューに配置されたことをコード プロファイラに通知します。 |
|
ガベージ コレクションが完了し、そのガベージ コレクションに対してすべてのガベージ コレクション コールバックが発行されたことをプロファイラに通知します。 |
|
ガベージ コレクションが開始されたことをコード プロファイラに通知します。 |
|
ガベージ コレクション ハンドルが作成されたことをコード プロファイラに通知します。 |
|
コード プロファイラに、ガベージ コレクション ハンドルが破棄されたことを通知します。 |
|
ガベージ コレクションが発生した後に、ルート参照についてプロファイラに通知します。このメソッドは、ICorProfilerCallback::RootReferences メソッドの拡張です。 |
|
ガベージ コレクションで削除されなかったオブジェクト参照についてプロファイラに通知します。 |
|
スレッドの名前が変更されたことをコード プロファイラに通知します。 |
解説
CLR は ICorProfilerCallback (または ICorProfilerCallback2) インターフェイスでメソッドを呼び出して、プロファイラがサブスクライブしたイベントが発生したときにプロファイラに通知します。これは、CLR がコード プロファイラとの通信に使用するプライマリ コールバック インターフェイスです。
コード プロファイラは、ICorProfilerCallback インターフェイスのメソッドを実装する必要があります。.NET Framework 2.0 以降のバージョンの場合、プロファイラは ICorProfilerCallback2 のメソッドも実装する必要があります。各メソッド実装は、S_OK (成功時) または E_FAIL (エラー時) の値を持つ HRESULT を返す必要があります。現在、CLR は、ICorProfilerCallback::ObjectReferences を除く各コールバックが返す HRESULT を無視します。
コード プロファイラは、ICorProfilerCallback インターフェイスおよび ICorProfilerCallback2 インターフェイスを実装する COM オブジェクトを Microsoft Windows レジストリに登録する必要があります。コード プロファイラは、ICorProfilerInfo::SetEventMask を呼び出すことで、通知を受け取るイベントをサブスクライブします。これは通常、ICorProfilerCallback::Initialize のプロファイラの実装で行われます。これにより、イベントが発生するとき、または実行中のランタイム プロセスでイベントが発生したときに、プロファイラはランタイムから通知を受け取ることができます。
![]() |
---|
プロファイラは単一の COM オブジェクトを登録します。プロファイラが .NET Framework Version 1.0 または 1.1 を対象としている場合、その COM オブジェクトが実装する必要があるのは、ICorProfilerCallback のメソッドのみです。プロファイラが .NET Framework Version 2.0 以降を対象としている場合、その COM オブジェクトは ICorProfilerCallback2 のメソッドも実装する必要があります。 |
必要条件
プラットフォーム : 「.NET Framework システム要件」を参照
ヘッダー : CorProf.idl
ライブラリ : CorGuids.lib
.NET Framework のバージョン : 3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0