共用方式為


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 的值不會損害執行階段,但可能會影響分析結果。

備註

因為執行階段處理類別建構函式的方式,所以每個函式可能可以接收一對以上 ReJITCompilationStartedReJITCompilationFinished 方法呼叫。 例如,執行階段開始重新編譯方法 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 起可用

另請參閱