ICorProfilerCallback::JITCompilationStarted (Método)
Notifica al generador de perfiles que el compilador Just-In-Time (JIT) ha empezado a compilar una función.
Sintaxis
HRESULT JITCompilationStarted(
[in] FunctionID functionId,
[in] BOOL fIsSafeToBlock);
Parámetros
functionId
[in] Identificador de la función para la que se inicia la compilación.
fIsSafeToBlock
[in] El valor de este parámetro se usa para indicar al generador de perfiles si el bloqueo afectará al funcionamiento del tiempo de ejecución. El valor es true
si el bloqueo puede hacer que el runtime espere a que el subproceso que realiza la llamada devuelva un valor desde esta devolución de llamada; de lo contrario, es false
.
Aunque un valor de true
no dañará el runtime, puede distorsionar los resultados de la generación de perfiles.
Comentarios
Es posible recibir más de un par de llamadas de JITCompilationStarted
y iCorProfilerCallback::JITCompilationFinished para cada función debido a la forma en que el runtime controla los constructores de clase. Por ejemplo, el runtime se inicia en el método A de compilación mediante JIT, pero para la clase B es necesario ejecutar el constructor de clase. Por lo tanto, el runtime compila mediante JIT el constructor de la clase B y lo ejecuta. Mientras se ejecuta el constructor, realiza una llamada al método A, lo que hace que este método se vuelva a compilar mediante JIT. En este escenario, se detiene la primera compilación JIT del método A. Pero ambos intentos del método A de compilación mediante JIT se notifican con eventos de compilación JIT. Si el generador de perfiles va a reemplazar el código de lenguaje intermedio común (CIL) para el método A llamando al método ICorProfilerInfo::SetILFunctionBody , debe hacerlo para ambos JITCompilationStarted
eventos, pero puede usar el mismo bloque CIL para ambos.
Los generadores de perfiles deben admitir la secuencia de devoluciones de llamada JIT en los casos en los que dos subprocesos realizan devoluciones de llamada simultáneamente. Por ejemplo, el subproceso A llama a JITCompilationStarted
. Pero antes de que el subproceso A llame a JITCompilationFinished
, el subproceso B llama a ICorProfilerCallback::ExceptionSearchFunctionEnter con el id. de función de la devolución de llamada de JITCompilationStarted
del subproceso A. Es posible que parezca que el id. de función aún no debe ser válido porque el generador de perfiles todavía no ha recibido una llamada a JITCompilationFinished
. Pero en un caso como este, el id. de función es válido.
Requisitos
Plataformas: Vea Requisitos de sistema.
Encabezado: CorProf.idl, CorProf.h
Biblioteca: CorGuids.lib
Versiones de .NET Framework: disponible a partir de la versión 2.0