次の方法で共有


ICorProfilerCallback::JITCachedFunctionSearchStarted メソッド

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

構文

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

パラメーター

functionId
[in] 検索が実行されている関数の ID。

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

解説

.NET Framework バージョン 2.0 では、通常の NGen イメージのすべての関数に対して JITCachedFunctionSearchStartedICorProfilerCallback::JITCachedFunctionSearchFinished メソッドのコールバックは行われません。 プロファイル用に最適化された NGen イメージのみが、イメージ内のすべての関数のコールバックを生成します。 ただし、オーバーヘッドが増加するため、プロファイラーでは、これらのコールバックを使用して関数の Just-In-Time (JIT) コンパイルを強制的に実行する場合にのみ、プロファイラー用に最適化された NGen イメージを要求する必要があります。 それ以外の場合、プロファイラーは関数情報を収集するために遅延戦略を使用する必要があります。

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

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

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

必要条件

:システム要件」を参照してください。

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

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 2.0 以降で使用可能

関連項目