Freigeben über


ICorProfilerCallback::JITCompilationStarted-Methode

Aktualisiert: November 2007

Benachrichtigt den Profiler, dass der JIT-Compiler (Just-In-Time) begonnen hat, eine Funktion zu kompilieren.

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

Parameter

  • functionId
    [in] Die ID der Funktion, für die die Kompilierung startet.

  • fIsSafeToBlock
    [in] Ein Wert, der dem Profiler angibt, ob Blockierung die Operation der Laufzeit beeinflusst. Der Wert ist true, wenn Blockierung dazu führen kann, dass die Laufzeit warten muss, bis der aufrufende Thread von diesem Rückruf zurückgegeben wird, andernfalls false.

    Obwohl ein Wert von true der Laufzeit nicht schadet, kann er die Profilerstellungsergebnisse verzerren.

Hinweise

Es ist möglich, mehrere Paare von JITCompilationStarted-Aufrufen und ICorProfilerCallback::JITCompilationFinished-Aufrufen für die einzelnen Funktionen zu empfangen. Dies liegt an der Art und Weise, in der die Laufzeit Klassenkonstruktoren behandelt. Die Laufzeit beginnt z. B. mit der JIT-Kompilierung von Methode A, aber der Klassenkonstruktor für Klasse B muss ausgeführt werden. Die Laufzeit JIT-kompiliert daher den Konstruktor für Klasse B und führt ihn aus. Während der Konstruktor ausgeführt wird, ruft er Methode A auf, was zu einer erneuten JIT-Kompilierung von Methode A führt. In diesem Szenario wird die erste JIT-Kompilierung der Methode A angehalten. Beide Versuche einer JIT-Kompilierung von Methode A werden aber mit JIT-Kompilierungsereignissen gemeldet. Wenn der Profiler durch Aufruf der ICorProfilerInfo::SetILFunctionBody-Methode MSIL-Code (Microsoft Intermediate Language) für Methode A ersetzt, muss dies für beide JITCompilationStarted-Ereignisse geschehen. Es kann aber für beide der gleiche MSIL-Block verwendet werden.

Profiler müssen die Sequenz von JIT-Rückrufen in Fällen unterstützen, in denen zwei Threads gleichzeitig Rückrufe durchführen. Thread A ruft z. B. JITCompilationStarted auf. Bevor Thread A JITCompilationFinished aufruft, ruft Thread B jedoch ICorProfilerCallback::ExceptionSearchFunctionEnter mit der Funktions-ID des JITCompilationStarted-Rückrufs von Thread A auf. Es könnte der Eindruck entstehen, dass die Funktions-ID noch nicht gültig ist, da der Profiler noch keinen Aufruf für JITCompilationFinished empfangen hat. In einem solchen Fall ist die Funktions-ID jedoch gültig.

Anforderungen

Plattformen: siehe Systemanforderungen für .NET Framework.

Header: CorProf.idl

Bibliothek: CorGuids.lib

.NET Framework-Versionen: 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0

Siehe auch

Referenz

ICorProfilerCallback-Schnittstelle

ICorProfilerCallback::JITCompilationFinished-Methode