Метод ICorProfilerCallback4::ReJITCompilationStarted
Уведомляет профилировщик о том, что JIT-компилятор начал перекомпилировать функцию.
Синтаксис
HRESULT ReJITCompilationStarted(
[in] FunctionID functionId,
[in] ReJITID rejitId,
[in] BOOL fIsSafeToBlock);
Параметры
functionId
[in] Идентификатор функции, которую JIT-компилятор начал перекомпилировать.
rejitId
[in] Идентификатор перекомпиляции новой версии функции.
fIsSafeToBlock
[in] true
значение , чтобы указать, что блокировка может привести к тому, что среда выполнения будет ожидать возвращения вызывающего потока из этого обратного вызова; false
значение , чтобы указать, что блокировка не повлияет на работу среды выполнения. Значение true
не вредит среде выполнения, но может повлиять на результаты профилирования.
Комментарии
Для каждой функции можно получить несколько пар и вызовов ReJITCompilationStarted
методов ReJITCompilationFinished из-за того, как среда выполнения обрабатывает конструкторы классов. Например, среда выполнения начинает перекомпилировать метод A, но необходимо запустить конструктор класса для класса B. Таким образом, среда выполнения перекомпилирует конструктор для класса B и запускает его. Во время выполнения конструктор выполняет вызов метода A, что приводит к повторной компиляции метода A. В этом сценарии первая перекомпиляция метода A останавливается. Однако обе попытки перекомпиляции метода A передаются с событиями JIT-перекомпиляции.
Профилировщики должны поддерживать последовательность обратных вызовов JIT-перекомпиляции в случаях, когда два потока одновременно выполняют обратные вызовы. Например, поток A вызывает ReJITCompilationStarted
. Однако перед вызовом ReJITCompilationFinished поток B вызывает ICorProfilerCallback::ExceptionSearchFunctionEnter с идентификатором функции из обратного ReJITCompilationStarted
вызова для потока A. Может показаться, что идентификатор функции еще не должен быть допустимым, так как профилировщик еще не получил вызов ReJITCompilationFinished . Однако в этом случае идентификатор функции является допустимым.
Требования
Платформы: см. раздел Требования к системе.
Заголовок: CorProf.idl, CorProf.h
Библиотека: CorGuids.lib
версии платформа .NET Framework: доступно с версии 4.5