ICorProfilerInfo4::RequestReJIT 方法

要求指定函式的所有執行個體進行 JIT 重新編譯。

語法

HRESULT RequestReJIT (  
   [in] ULONG    cFunctions,  
   [in, size_is(cFunctions)]  ModuleID    moduleIds[],  
   [in, size_is(cFunctions)]  mdMethodDef methodIds[]);  

參數

cFunctions
[in] 要重新編譯的函式數目。

moduleIds
[in] 指定 (module, methodDef) 組的 moduleId 部分,這個部分可識別所要重新編譯的函式。

methodIds
[in] 指定 (module, methodDef) 組的 methodId 部分,這個部分可識別所要重新編譯的函式。

傳回值

這個方法會傳回下列特定的 HRESULT,以及表示方法失敗的 HRESULT 錯誤。

HRESULT 描述
S_OK 已嘗試將所有方法標示為要進行 JIT 重新編譯。 分析工具必須實作 ICorProfilerCallback4::ReJITError 方法,以確定哪些方法已成功標示為需進行 JIT 重新編譯。
CORPROF_E_CALLBACK4_REQUIRED 分析工具必須實作 ICorProfilerCallback4 介面,才能支援這個呼叫。
CORPROF_E_REJIT_NOT_ENABLED 尚未啟用 JIT 重新編譯。 您必須在初始化時使用 ICorProfilerInfo::SetEventMask 方法來設定 COR_PRF_ENABLE_REJIT 旗標,以啟用 JIT 重新編譯。
E_INVALIDARG cFunctions 為 0,或者 moduleIdsmethodIdsNULL
E_OUTOFMEMORY CLR 無法完成要求,因為記憶體不足。

備註

呼叫 RequestReJIT,讓執行階段重新編譯所指定的一組函式。 程式碼分析工具可以使用 ICorProfilerFunctionControl 介面調整在語言函式重新編譯時產生的程式碼。 這不會影響目前正在執行的函式,只會影響未來的函式叫用。 如果所指定的任何函式先前已進行過 JIT 重新編譯,要求重新編譯就等於還原並重新編譯函式。 為了保留可反轉性,當 JIT 編譯器編譯函式的原始版本時,只會考慮其被呼叫端的原始版本來進行內嵌決策。 當 JIT 編譯器重新編譯函式時,它會考慮其被呼叫端的目前版本 (已重新編譯或原始) 來進行內嵌。

分析工具通常會呼叫 RequestReJIT,以回應要求分析工具檢測一或多個方法的使用者輸入。 RequestReJIT 通常會暫停執行階段,以執行某些工作,而且可能會觸發記憶體回收。 因此,分析工具應該從其先前建立的執行緒來呼叫 RequestReJIT,而不是從目前正在執行分析工具回呼的 CLR 建立的執行緒。

規格需求

平台:請參閱系統需求

標頭: CorProf.idl、CorProf.h

程式庫:CorGuids.lib

.NET Framework版本:自 4.5 起可用

另請參閱