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 JITCompilationFinished
wą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