ICorProfilerCallback::JITCompilationStarted 方法

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

HRESULT JITCompilationStarted(
    [in] FunctionID functionId,
    [in] BOOL       fIsSafeToBlock);

参数

  • functionId
    [in] 要开始编译的函数的 ID。

  • fIsSafeToBlock
    [in] 一个值,用于向探查器指示阻止是否将影响运行时的操作。 如果阻止可能导致运行时等待调用线程从此回调中返回,则该值为 true;否则为 false。

    true 值虽然不会对运行时造成损害,但可能会扭曲分析结果。

备注

由于运行时对类构造函数采用的特殊处理方式,因此对于每个函数,可能会收到多个 JITCompilationStartedICorProfilerCallback::JITCompilationFinished 调用对。 例如,运行时开始对方法 A 进行 JIT 编译,但此时需要运行类 B 的类构造函数。 因此,运行时将对类 B 的构造函数进行 JIT 编译并加以运行。 当该构造函数运行时,它调用方法 A,从而导致再次对方法 A 进行 JIT 编译。 在此情况下,对方法 A 的第一个 JIT 编译将暂停。 但是,JIT 编译事件将对这两次针对方法 A 的 JIT 编译尝试进行报告。 如果探查器要通过调用 ICorProfilerInfo::SetILFunctionBody 方法来替换方法 A 的 Microsoft 中间语言 (MSIL) 代码,则它必须为这两个 JITCompilationStarted 事件都执行此操作,不过它可以对这两个事件使用同一 MSIL 块。

当两个线程同时执行回调时,探查器必须支持 JIT 回调序列。 例如,线程 A 调用 JITCompilationStarted。 但是,在线程 A 调用 JITCompilationFinished 之前,线程 B 使用从线程 A 的 JITCompilationStarted 回调返回的函数 ID 调用 ICorProfilerCallback::ExceptionSearchFunctionEnter。 该函数 ID 似乎不应有效,因为探查器尚未收到对 JITCompilationFinished 的调用。 但在此类情况下,该函数 ID 是有效的。

要求

**平台:**请参见 .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 接口

ICorProfilerCallback::JITCompilationFinished 方法