次の方法で共有


ICorProfilerCallback::JITCachedFunctionSearchStarted メソッド

ネイティブ イメージ ジェネレーター (NGen.exe) を使用して以前にコンパイルされた関数の検索が開始されたことをプロファイラーに通知します。

HRESULT JITCachedFunctionSearchStarted(
    [in]  FunctionID functionId,
    [out] BOOL *pbUseCachedFunction);

パラメーター

  • functionId
    [入力] 検索が実行される関数の ID。

  • pbUseCachedFunction
    [出力] 実行エンジンがキャッシュ バージョンの関数 (使用可能な場合) を使用する必要がある場合は true。それ以外の場合は false。 値が false の場合、実行エンジンは、JIT コンパイルされていないバージョンを使用するのではなく、関数を JIT コンパイルします。

解説

.NET Framework Version 2.0 では、JITCachedFunctionSearchStarted コールバックと ICorProfilerCallback::JITCachedFunctionSearchFinished Method コールバックは、通常の NGen イメージ内のすべての関数に対して行われるわけではありません。 イメージ内のすべての関数のコールバックを生成できるのは、プロファイル用に最適化された NGen イメージのみです。 ただし、追加のオーバーヘッドにより、これらのコールバックを使用して関数の Just-In-Time (JIT) コンパイルを強制的に実行する場合のみ、プロファイラーは最適化された NGen イメージを要求する必要があります。 それ以外の場合、プロファイラーは負荷の少ない方法を使用して関数情報を収集する必要があります。

プロファイラーは、プロファイリングされたアプリケーションの複数のスレッドが、同じメソッドを同時に呼び出す場合をサポートする必要があります。 たとえば、スレッド A が JITCachedFunctionSearchStarted を呼び出し、プロファイラーがそれに応じて pbUseCachedFunctionを FALSE に設定し、JIT コンパイルを強制的に実行するとします。 次に、スレッド A は ICorProfilerCallback::JITCompilationStartedICorProfilerCallback::JITCompilationFinished を呼び出します。

ここで、スレッド B が同じ関数の JITCachedFunctionSearchStarted を呼び出します。 プロファイラーが関数を JIT コンパイルする意図を示していても、プロファイラーは 2 番目のコールバックを受け取ります。これは、プロファイラーがスレッド A の JITCachedFunctionSearchStarted の呼び出しに応答する前に、スレッド B がコールバックを送信するためです。 スレッドが呼び出しを行う順序は、スレッドのスケジュール方法によって異なります。

プロファイラーが重複するコールバックを受け取った場合、重複するすべてのコールバックについて、pbUseCachedFunction によって参照される値を同じ値に設定する必要があります。 つまり、同じ functionId 値を使用して JITCachedFunctionSearchStarted を複数回呼び出す場合、プロファイラーはそのたびに同じ応答を返す必要があります。

必要条件

プラットフォーム: 「.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

参照

参照

ICorProfilerCallback インターフェイス