ICorProfilerCallback::JITCompilationStarted 方法
通知探查器,实时 (JIT) 编译器已开始编译函数。
语法
HRESULT JITCompilationStarted(
[in] FunctionID functionId,
[in] BOOL fIsSafeToBlock);
参数
functionId
[in] 要开始编译的函数的 ID。
fIsSafeToBlock
[in] 指示探查器阻塞是否会影响运行时操作的值。 如果阻塞可能会导致运行时等待调用线程从此回调返回,则该值为 true
;否则为 false
。
尽管 true
的值不会损害运行时,但可能会扭曲分析结果。
注解
由于运行时处理类构造函数的方式,每个函数可以接收多对 JITCompilationStarted
和 ICorProfilerCallback::JITCompilationFinished 调用。 例如,运行时开始 JIT 编译方法 A,但需要运行类 B 的类构造函数。 因此,运行时 JIT 编译类 B 的构造函数并运行该函数。 当构造函数正在运行时,它会调用方法 A,这将导致再次对方法 A 进行 JIT 编译。 在此方案中,方法 A 的第一次 JIT 编译将暂停。 但是,将使用 JIT 编译事件来报告 JIT 编译方法 A 的两种尝试。 如果探查器将使用 ICorProfilerInfo::SetILFunctionBody 方法替换方法 A 的 Microsoft 中间语言 (MSIL) 代码,则必须对两个 JITCompilationStarted
事件执行此操作,但可以对两者使用相同的 MSIL 块。
当两个线程同时进行回调时,探查器必须支持 JIT 回调序列。 例如,线程 A 调用 JITCompilationStarted
。 但是,在线程 A 调用 JITCompilationFinished
之前,线程 B 使用线程 A 的 JITCompilationStarted
回调中的函数 ID 调用 ICorProfilerCallback::ExceptionSearchFunctionEnter。 由于探查器尚未收到对 JITCompilationFinished
的调用,因此该函数 ID 可能看似无效。 但是,这种情况下的函数 ID 有效。
要求
平台:请参阅系统要求。
头文件: CorProf.idl、CorProf.h
库:CorGuids.lib
.NET Framework 版本:自 2.0 起可用
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将推出:在整个 2024 年,我们将逐步取消以“GitHub 问题”作为内容的反馈机制,并将其替换为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈