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


Метод ICorProfilerCallback::JITCompilationStarted

Уведомляет профилировщика о том, что JIT-компилятор начал компилировать функцию.

Синтаксис

HRESULT JITCompilationStarted(
    [in] FunctionID functionId,
    [in] BOOL       fIsSafeToBlock);

Параметры

functionId [in] Идентификатор функции, для которой начинается компиляция.

fIsSafeToBlock [in] Значение, указывающее профилировщику, влияет ли блокировка на операцию среды выполнения. Значение заключается в том true , что блокировка может привести к тому, что среда выполнения ожидает возврата вызывающего потока из этого обратного вызова; в противном случае false.

Хотя значение true не повредит среде выполнения, оно может сломить результаты профилирования.

Замечания

Можно получить несколько пар JITCompilationStarted и вызовов ICorProfilerCallback::JITCompilationFinished для каждой функции из-за того, что среда выполнения обрабатывает конструкторы классов. Например, среда выполнения запускает метод JIT-компиляции A, но конструктор классов для класса B должен выполняться. Поэтому JIT-компилирует конструктор класса B и запускает его. Во время выполнения конструктора выполняется вызов метода A, что приводит к повторному компиляции метода A. В этом сценарии первая компиляция JIT метода A останавливается. Однако обе попытки JIT-компиляции метода A сообщаются с событиями JIT-компиляции. Если профилировщик заменит код общего промежуточного языка (CIL) для метода A путем вызова метода ICorProfilerInfo::SetILFunctionBody , он должен сделать это для обоих событий, но он может использовать один и тот же блок CIL для обоих JITCompilationStarted событий.

Профилировщики должны поддерживать последовательность обратных вызовов JIT в случаях, когда два потока одновременно выполняют обратные вызовы. Например, вызовы JITCompilationStartedпотока A. Однако перед вызовами JITCompilationFinishedпотока A поток B вызывает ICorProfilerCallback::ExceptionSearchFunctionEnter с идентификатором функции из обратного JITCompilationStarted вызова потока A. Возможно, идентификатор функции еще не должен быть допустимым, так как вызов, к которому JITCompilationFinished еще не был получен профилировщиком. Однако в таком случае идентификатор функции действителен.

Требования

Платформы: см. раздел Требования к системе.

Заголовок: CorProf.idl, CorProf.h

Библиотека: CorGuids.lib

версии платформа .NET Framework: Доступно с версии 2.0

См. также