ICorProfilerCallback::JITCompilationStarted 方法
通知分析工具,Just-In-Time (JIT) 編譯程式已開始編譯函式。
語法
HRESULT JITCompilationStarted(
[in] FunctionID functionId,
[in] BOOL fIsSafeToBlock);
參數
functionId
[in]編譯開始之函式的標識碼。
fIsSafeToBlock
[in]值,指出封鎖是否會影響運行時間的作業。 如果封鎖可能會導致執行時間等候呼叫線程從這個回呼傳回,則為 true
,否則 false
為 。
雖然的值 true
不會損害運行時間,但它可能會扭曲分析結果。
備註
由於運行時間處理類別建構函式的方式,可以接收多個 JITCompilationStarted
和 ICorProfilerCallback::JITCompilationFinished 對每個函式的呼叫。 例如,運行時間會啟動 JIT 編譯方法 A,但必須執行類別 B 的類別建構函式。 因此,運行時間 JIT 會編譯類別 B 的建構函式,並加以執行。 當建構函式執行時,它會呼叫方法 A,這會導致方法 A 再次編譯 JIT。 在此案例中,會停止方法 A 的第一個 JIT 編譯。 不過,JIT 編譯方法 A 的兩次嘗試都會回報 JIT 編譯事件。 如果分析工具會藉由呼叫 ICorProfilerInfo::SetILFunctionBody 方法來取代方法 A 的通用中繼語言 (CIL) 程式代碼,則必須針對這兩個事件執行此動作,但它可能會針對兩 JITCompilationStarted
者使用相同的 CIL 區塊。
如果兩個線程同時進行回呼,分析工具必須支援 JIT 回呼的順序。 例如,線程 A 會呼叫 JITCompilationStarted
。 不過,在線程 A 呼叫 JITCompilationFinished
之前,線程 B 會從線程 A 的JITCompilationStarted
回呼呼叫 ICorProfilerCallback::ExceptionSearchFunctionEnter 與函式標識符。 函式識別碼可能尚未有效,因為分析工具尚未收到 對的呼叫 JITCompilationFinished
。 不過,在這種情況下,函式標識碼是有效的。
需求
平台:請參閱系統需求。
標頭: CorProf.idl、CorProf.h
程式庫:CorGuids.lib
.NET Framework 版本: 自 2.0 起提供