Метод 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