共用方式為


ICorProfilerCallback::JITCompilationStarted 方法

向分析工具告知 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、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 方法