ICorProfilerCallback4::ReJITCompilationStarted 方法

通知探查器实时 (JIT) 编译器已开始重新编译函数。

语法

HRESULT ReJITCompilationStarted(
    [in] FunctionID functionId,  
    [in] ReJITID    rejitId,  
    [in] BOOL       fIsSafeToBlock);  

参数

functionId
[in] JIT 编译器已开始重新编译的函数的 ID。

rejitId
[in] 新版本的函数的重新编译 ID。

fIsSafeToBlock
[in] 如果为 true,则指示阻塞可能会导致运行时等待调用线程从此回调返回;如果为 false,则指示阻塞不会影响运行时的操作。 true 的值不会影响运行时,但可能影响分析结果。

注解

由于运行时处理类构造函数的方式,每个函数都可以接收多对 ReJITCompilationStartedReJITCompilationFinished 方法调用。 例如,运行时开始重新编译方法 A,但需要运行类 B 的类构造函数。 因此,运行时重新编译类 B 的构造函数并运行该函数。 当构造函数正在运行时,它会调用方法 A,这将导致再次对方法 A 进行重新编译。 在此方案中,方法 A 的第一次重新编译将暂停。 但是,将使用 JIT 重新编译事件来报告重新编译方法 A 的两种尝试。

当两个线程同时进行回调时,探查器必须支持 JIT 重新编译回调序列。 例如,线程 A 调用 ReJITCompilationStarted;但是,在线程 A 调用 ReJITCompilationFinished 之前,线程 B 使用线程 A 的 ReJITCompilationStarted 回调中的函数 ID 调用 ICorProfilerCallback::ExceptionSearchFunctionEnter。由于探查器尚未收到对 ReJITCompilationFinished 的调用,因此函数 ID 似乎不应有效。 但在这种情况下,函数 ID 有效。

要求

平台:请参阅系统要求

头文件: CorProf.idl、CorProf.h

库:CorGuids.lib

.NET Framework 版本:自 4.5 起可用

另请参阅