Поделиться через


Метод ICorProfilerInfo4::RequestReJIT

Запрашивает перекомпиляцию JIT всех экземпляров указанных функций.

Синтаксис

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

Параметры

cFunctions
[in] Число функций для перекомпиляции.

moduleIds
[in] Указывает часть moduleId пар (module, methodDef), которые идентифицируют перекомпилируемые функции.

methodIds
[in] Указывает часть methodId пар (module, methodDef), которые идентифицируют перекомпилируемые функции.

Возвращаемое значение

Этот метод возвращает следующие конкретные результаты HRESULT, а также ошибки HRESULT, которые указывают на сбой метода.

HRESULT Описание:
S_OK Была предпринята попытка пометить все методы для перекомпиляции JIT. Профилировщик должен реализовать метод ICorProfilerCallback4::ReJITError , чтобы определить, какие методы были успешно помечены для JIT-перекомпиляции.
CORPROF_E_CALLBACK4_REQUIRED Для поддержки этого вызова профилировщик должен реализовать интерфейс ICorProfilerCallback4 .
CORPROF_E_REJIT_NOT_ENABLED Перекомпиляция JIT не была включена. Чтобы задать COR_PRF_ENABLE_REJIT флаг, необходимо включить JIT-перекомпиляцию во время инициализации с помощью метода ICorProfilerInfo::SetEventMask.
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

См. также раздел