다음을 통해 공유


ICorProfilerCallback4::ReJITCompilationStarted 메서드

JIT(Just-In-Time) 컴파일러가 함수 다시 컴파일을 시작했음을 프로파일러에 알립니다.

구문

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

매개 변수

functionId
[in] JIT 컴파일러가 재컴파일을 시작한 함수의 ID입니다.

rejitId
[in] 함수의 새 버전의 재컴파일 ID입니다.

fIsSafeToBlock
[in] 차단으로 인해 런타임이 호출 스레드가 이 콜백에서 반환될 때까지 기다릴 수 있음을 나타내려면 true이며, 차단이 런타임 작업에 영향을 미치지 않음을 나타내려면 false입니다. true 값은 런타임에 해를 끼치지 않지만 프로파일링 결과에 영향을 줄 수 있습니다.

설명

런타임이 클래스 생성자를 처리하는 방식 때문에 각 함수에 대해 ReJITCompilationStartedReJITCompilationFinished 메서드 호출 쌍을 두 개 이상 받을 수 있습니다. 예를 들어 런타임은 메서드 A를 다시 컴파일하기 시작하지만 클래스 B에 대한 클래스 생성자를 실행해야 합니다. 따라서 런타임은 클래스 B에 대한 생성자를 다시 컴파일하고 실행합니다. 생성자가 실행되는 동안 메서드 A를 호출하여 메서드 A가 다시 컴파일되도록 합니다. 이 시나리오에서는 메서드 A의 첫 번째 다시 컴파일이 중지됩니다. 그러나 메서드 A를 다시 컴파일하려는 두 시도 모두 JIT 다시 컴파일 이벤트와 함께 보고됩니다.

프로파일러는 두 스레드가 동시에 콜백을 생성하는 경우 JIT 다시 컴파일 콜백 시퀀스를 지원해야 합니다. 예를 들어 스레드 A는 ReJITCompilationStarted를 호출합니다. 그러나 스레드 A가 ReJITCompilationFinished를 호출하기 전에 스레드 B는 스레드 A에 대한 ReJITCompilationStarted 콜백의 함수 ID를 사용하여 ICorProfilerCallback::ExceptionSearchFunctionEnter를 호출합니다. 아직 프로파일러에서 ReJITCompilationFinished 호출을 받지 않았기 때문에 유효합니다. 그러나 이 경우 함수 ID는 유효합니다.

요구 사항

플랫폼:시스템 요구 사항을 참조하세요.

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

.NET Framework 버전: 4.5부터 사용 가능

참고 항목