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 映像中的所有函数进行 JITCachedFunctionSearchStarted
和 ICorProfilerCallback::JITCachedFunctionSearchFinished 方法回叫。 只有针对配置文件优化的 NGen 映像将为映像中的所有函数生成回叫。 但是,由于额外的开销,探查器应仅在打算使用这些回叫来强行对函数进行实时 (JIT) 编译时才请求探查器优化的 NGen 映像。 否则,探查器应使用惰性策略来收集函数信息。
探查器必须支持一个分析的应用程序的多个线程同时调用同一方法的情况。 例如,线程 A 调用 JITCachedFunctionSearchStarted
,探查器通过将 pbUseCachedFunction 设置为 FALSE 进行响应来强制 JIT 编译。 随后,线程 A 调用 ICorProfilerCallback::JITCompilationStarted 和 ICorProfilerCallback::JITCompilationFinished。
现在,线程 B 针对同一函数调用 JITCachedFunctionSearchStarted
。 即使探查器已经打算对函数进行 JIT 编译,但探查器仍会收到第二个回叫,因为线程 B 会在探查器对线程 A 调用 JITCachedFunctionSearchStarted
进行响应之前发送回叫。 线程进行调用的顺序取决于线程的调度方式。
当探查器收到重复的回叫时,它必须将 pbUseCachedFunction
引用的值设置为所有重复的回叫的相同值。 也就是说,使用同一 functionId
值多次调用 JITCachedFunctionSearchStarted
时,探查器每次都必须进行相同的响应。
要求
平台:请参阅系统要求。
头文件: CorProf.idl、CorProf.h
库:CorGuids.lib
.NET Framework 版本:自 2.0 起可用