Udostępnij za pośrednictwem


ICorProfilerCallback::JITCompilationStarted — Metoda

Powiadamia profilera, że kompilator just in time (JIT) rozpoczął kompilowanie funkcji.

Składnia

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

Parametry

functionId [in] Identyfikator funkcji, dla której rozpoczyna się kompilacja.

fIsSafeToBlock [in] Wartość wskazująca profiler, czy blokowanie wpłynie na działanie środowiska uruchomieniowego. Wartość jest true taka, jeśli blokowanie może spowodować, że środowisko uruchomieniowe będzie czekać, aż wątek wywołujący powróci z tego wywołania zwrotnego; w przeciwnym razie . false

Chociaż wartość true nie zaszkodzi środowisku uruchomieniowemu, może wypaczyć wyniki profilowania.

Uwagi

Istnieje możliwość odbierania więcej niż jednej pary JITCompilationStarted wywołań i ICorProfilerCallback::JITCompilationFinished wywołań dla każdej funkcji ze względu na sposób, w jaki środowisko uruchomieniowe obsługuje konstruktory klas. Na przykład środowisko uruchomieniowe uruchamia metodę JIT-compile A, ale należy uruchomić konstruktor klasy dla klasy B. W związku z tym środowisko uruchomieniowe JIT kompiluje konstruktor klasy B i uruchamia go. Gdy konstruktor jest uruchomiony, wykonuje wywołanie metody A, co powoduje ponowne skompilowanie metody A. W tym scenariuszu zostanie zatrzymana pierwsza kompilacja JIT metody A. Jednak obie próby kompilacji JIT-compile A są zgłaszane ze zdarzeniami kompilacji JIT. Jeśli profiler zastąpi kod wspólnego języka pośredniego (CIL) dla metody A, wywołując metodę ICorProfilerInfo::SetILFunctionBody , musi to zrobić dla obu zdarzeń, ale może używać tego samego bloku CIL dla obu JITCompilationStarted tych zdarzeń.

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

Wymagania

Platformy: zobacz Wymagania systemowe.

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

Biblioteka: CorGuids.lib

Wersje programu .NET Framework: dostępne od wersji 2.0

Zobacz też