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,或者 moduleIds 或 methodIds 为 NULL 。 |
E_OUTOFMEMORY | CLR 无法完成请求,因为它已耗尽内存。 |
注解
调用 RequestReJIT
以使运行时重新编译一组指定的函数。 然后,代码探查器可使用 ICorProfilerFunctionControl 接口调整重新编译函数时生成的代码。 这不会影响当前正在执行的函数,仅影响将来的函数调用。 如果此前已 JIT 重新编译任意指定函数,请求重新编译是指还原和重新编译函数。 若要保留可还原性,当 JIT 编译器编译函数的原始版本时,将仅考虑被调用方用于内联决定的原始版本。 JIT 编译器重新编译函数时,将考虑被调用方用于内联的当前版本(重新编译版本或原始版本)。
探查器通常会调用 RequestReJIT
以响应用户输入对探查器检测一个或多个方法的请求。 RequestReJIT
通常将运行时挂起以执行其中部分工作,这有可能触发垃圾回收。 因此,探查器应从其先前创建的线程调用 RequestReJIT
,而不从 CLR 创建的且当前正在执行探查器回调的线程调用。
要求
平台:请参阅系统要求。
头文件: CorProf.idl、CorProf.h
库:CorGuids.lib
.NET Framework 版本:自 4.5 起可用