ICorProfilerInfo4::RequestReJIT 方法

请求 JIT 重新编译指定函数的所有实例。

语法

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

参数

cFunctions
[in] 要重新编译的函数数目。

moduleIds
[in] 指定(modulemethodDef)对的 moduleId 部分,它标识要重新编译的函数。

methodIds
[in] 指定(modulemethodDef)对的 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 起可用

另请参阅