ICorProfilerCallback::JITCompilationStarted 方法
向分析工具告知 Just-In-Time (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,而造成 JIT 重新編譯方法 A。 在這個案例中,會暫止方法 A 的第一個 JIT 編譯。 不過,方法 A 的兩個 JIT 編譯嘗試都會以 JIT 編譯事件回報。 如果分析工具想要藉由呼叫 ICorProfilerInfo::SetILFunctionBody 方法以取代方法 A 的 Microsoft Intermediate Language (MSIL) 程式碼,則必須為兩個 JITCompilationStarted 事件執行這項作業,但可以針對兩者使用相同的 MSIL 區塊。
當兩個執行緒同時回呼時,分析工具必須支援 JIT 回呼的序列。 例如,執行緒 A 呼叫 JITCompilationStarted。 不過,在執行緒 A 呼叫 JITCompilationFinished 之前,執行緒 B 會先呼叫 ICorProfilerCallback::ExceptionSearchFunctionEnter,並使用取自執行緒 A 之 JITCompilationStarted 回呼的函式 ID。 因為分析工具尚未收到 JITCompilationFinished 呼叫,函式 ID 可能看來尚未有效。 但在這種情況下,函式 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