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


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

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