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