ICorProfilerCallback4::ReJITCompilationStarted 方法
通知分析工具,Just-In-Time (JIT) 編譯器已開始重新編譯函式。
語法
HRESULT ReJITCompilationStarted(
[in] FunctionID functionId,
[in] ReJITID rejitId,
[in] BOOL fIsSafeToBlock);
參數
functionId
[in] JIT 編譯器已開始重新編譯之函式的識別碼。
rejitId
[in] 新版函式的重新編譯識別碼。
fIsSafeToBlock
[in] true
表示封鎖可能會導致執行階段等候呼叫執行緒從這個回呼傳回;false
表示封鎖不會影響執行階段的作業。 true
的值不會損害執行階段,但可能會影響分析結果。
備註
因為執行階段處理類別建構函式的方式,所以每個函式可能可以接收一對以上 ReJITCompilationStarted
和 ReJITCompilationFinished 方法呼叫。 例如,執行階段開始重新編譯方法 A,但必須執行類別 B 的類別建構函式。 因此,執行階段會重新編譯類別 B 的建構函式並加以執行。 當建構函式執行時,它會呼叫方法 A,這會導致再次重新編譯方法 A。 在此案例中,方法 A 的第一個重新編譯會停止。 不過,兩種嘗試重新編譯方法 A 都會回報 JIT 重新編譯事件。
當兩個執行緒同時進行回呼時,分析工具必須支援 JIT 重新編譯回呼的序列。 例如,執行緒 A 會呼叫 ReJITCompilationStarted
;不過,在執行緒 A 呼叫 ReJITCompilationFinished之前,執行緒 B 會呼叫 ICorProfilerCallback::ExceptionSearchFunctionEnter,其函式識別碼來自執行緒 A 的 ReJITCompilationStarted
回呼。函式識別碼可能尚未處於有效狀態,因為分析工具尚未收到對 ReJITCompilationFinished 的呼叫。 不過,在此情況下,函式識別碼是有效的。
規格需求
平台:請參閱系統需求。
標頭: CorProf.idl、CorProf.h
程式庫:CorGuids.lib
.NET Framework版本:自 4.5 起可用