Udostępnij za pośrednictwem


ICorProfilerCallback4::ReJITCompilationStarted — Metoda

Powiadamia profilera, że kompilator just in time (JIT) zaczął ponownie kompilować funkcję.

Składnia

HRESULT ReJITCompilationStarted(
    [in] FunctionID functionId,  
    [in] ReJITID    rejitId,  
    [in] BOOL       fIsSafeToBlock);  

Parametry

functionId
[w] Identyfikator funkcji, którą kompilator JIT zaczął ponownie kompilować.

rejitId
[w] Identyfikator ponownej kompilacji nowej wersji funkcji.

fIsSafeToBlock
[w] true aby wskazać, że blokowanie może spowodować, że środowisko uruchomieniowe będzie czekać, aż wątek wywołujący powróci z tego wywołania zwrotnego; false aby wskazać, że blokowanie nie wpłynie na działanie środowiska uruchomieniowego. Wartość nie true szkodzi środowisku uruchomieniowemu, ale może mieć wpływ na wyniki profilowania.

Uwagi

Można odbierać więcej niż jedną parę metod ReJITCompilationStarted i ReJITCompilationFinished wywołania dla każdej funkcji ze względu na sposób obsługi konstruktorów klas przez środowisko uruchomieniowe. Na przykład środowisko uruchomieniowe zaczyna ponownie kompilować metodę A, ale należy uruchomić konstruktor klasy dla klasy B. W związku z tym środowisko uruchomieniowe ponownie kompiluje konstruktor klasy B i uruchamia go. Gdy konstruktor jest uruchomiony, wykonuje wywołanie metody A, co powoduje ponowne skompilowane metody A. W tym scenariuszu zostanie zatrzymana pierwsza ponowna kompilacja metody A. Jednak obie próby ponownego kompilowania metody A są zgłaszane ze zdarzeniami ponownego kompilowania JIT.

Profileery muszą obsługiwać sekwencję wywołań zwrotnych rekompilacji JIT w przypadkach, gdy dwa wątki jednocześnie robią wywołania zwrotne. Na przykład wątek A wywołuje ; ReJITCompilationStartedjednak przed wątkiem A wywołuje funkcję ReJITCompilationFinished, wątek B wywołuje ICorProfilerCallback::ExceptionSearchFunctionEnter z identyfikatorem funkcji z wywołania zwrotnego dla wątku ReJITCompilationStarted A. Może się wydawać, że identyfikator funkcji nie powinien być jeszcze prawidłowy, ponieważ wywołanie funkcji ReJITCompilationFinished nie zostało jeszcze odebrane przez profilera. Jednak w tym przypadku identyfikator funkcji jest prawidłowy.

Wymagania

Platformy: Zobacz Wymagania systemowe.

Nagłówka: CorProf.idl, CorProf.h

Biblioteki: CorGuids.lib

.NET Framework wersje: dostępne od wersji 4.5

Zobacz też