Metodo ICorProfilerCallback::JITCompilationStarted
Notifica al profiler che il compilatore JIT (Just-In-Time) ha iniziato a compilare una funzione.
Sintassi
HRESULT JITCompilationStarted(
[in] FunctionID functionId,
[in] BOOL fIsSafeToBlock);
Parametri
functionId
[in] ID della funzione per cui viene avviata la compilazione.
fIsSafeToBlock
[in] Valore che indica al profiler se il blocco influirà sull'operazione del runtime. Il valore è true
se il blocco può causare l'attesa del runtime per la restituzione del thread chiamante da questo callback; in caso contrario, false
.
Anche se un valore di true
non danneggia il runtime, può asimmetriare i risultati della profilatura.
Osservazioni:
È possibile ricevere più di una coppia di JITCompilationStarted
chiamate e ICorProfilerCallback::JITCompilationFinished per ogni funzione a causa del modo in cui il runtime gestisce i costruttori di classi. Ad esempio, il runtime inizia con il metodo JIT-compile A, ma il costruttore della classe per la classe B deve essere eseguito. Di conseguenza, il runtime JIT compila il costruttore per la classe B e lo esegue. Mentre il costruttore è in esecuzione, esegue una chiamata al metodo A, che determina la compilazione JIT del metodo A. In questo scenario la prima compilazione JIT del metodo A viene interrotta. Tuttavia, entrambi i tentativi al metodo JIT-compile A vengono segnalati con eventi di compilazione JIT. Se il profiler sostituirà il codice CIL (Common Intermediate Language) per il metodo A chiamando il metodo ICorProfilerInfo::SetILFunctionBody , deve farlo per entrambi JITCompilationStarted
gli eventi, ma può usare lo stesso blocco CIL per entrambi.
I profiler devono supportare la sequenza di callback JIT nei casi in cui due thread eseguono contemporaneamente callback. Ad esempio, il thread A chiama JITCompilationStarted
. Tuttavia, prima che il thread A chiami JITCompilationFinished
, il thread B chiama ICorProfilerCallback::ExceptionSearchFunctionEnter con l'ID funzione del callback del JITCompilationStarted
thread A. Potrebbe sembrare che l'ID funzione non sia ancora valido perché una chiamata a JITCompilationFinished
non è stata ancora ricevuta dal profiler. Tuttavia, in un caso simile a questo, l'ID funzione è valido.
Requisiti
Piattaforme: vedere Requisiti di sistema.
Intestazione: CorProf.idl, CorProf.h
Libreria: CorGuids.lib
Versioni di .NET Framework: disponibili dalla versione 2.0