共用方式為


ICorProfilerCallback::JITCompilationStarted 方法

更新:2007 年 11 月

向分析工具告知 Just-In-Time (JIT) 編譯器已開始編譯函式。

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

參數

  • functionId
    [in] 開始編譯的函式 ID。

  • fIsSafeToBlock
    [in] 向分析工具表示封鎖是否會影響執行階段作業之值。如果封鎖可能會使執行階段等待呼叫執行緒從此回呼傳回,則此值為 true,否則為 false。

    雖然 true 值不會傷害執行階段,但可能會扭曲分析結果。

備註

由於執行階段處理類別建構函式的方式,可能會針對每個函式接收多個 JITCompilationStartedICorProfilerCallback::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

**程式庫:**CorGuids.lib

**.NET Framework 版本:**3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

請參閱

參考

ICorProfilerCallback

ICorProfilerCallback::JITCompilationFinished 方法