다음을 통해 공유


ICorProfilerInfo4::RequestReJIT 메서드

지정된 함수의 모든 인스턴스에 대한 JIT 다시 컴파일을 요청합니다.

구문

HRESULT RequestReJIT (  
   [in] ULONG    cFunctions,  
   [in, size_is(cFunctions)]  ModuleID    moduleIds[],  
   [in, size_is(cFunctions)]  mdMethodDef methodIds[]);  

매개 변수

cFunctions
[in] 다시 컴파일할 함수 개수입니다.

moduleIds
[in] 다시 컴파일할 함수를 식별하는 (module, methodDef) 쌍의 moduleId 부분을 지정합니다.

methodIds
[in] 다시 컴파일할 함수를 식별하는 (module, methodDef) 쌍의 methodId 부분을 지정합니다.

Return Value

이 메서드는 다음과 같은 특정 HRESULT뿐만 아니라 메서드 오류를 나타내는 HRESULT 오류도 반환합니다.

HRESULT 설명
S_OK JIT 다시 컴파일을 위해 모든 메서드에 표시하려고 했습니다. 프로파일러가 JIT 다시 컴파일을 위해 성공적으로 표시된 메서드를 확인하려면 ICorProfilerCallback4::ReJITError 메서드를 구현해야 합니다.
CORPROF_E_CALLBACK4_REQUIRED 이 호출을 지원하려면 프로파일러가 ICorProfilerCallback4 인터페이스를 구현해야 합니다.
CORPROF_E_REJIT_NOT_ENABLED JIT 다시 컴파일이 사용하도록 설정되지 않았습니다. 초기화 중 ICorProfilerInfo::SetEventMask 메서드를 통해 JIT 다시 컴파일을 사용하도록 설정하여 COR_PRF_ENABLE_REJIT 플래그를 설정해야 합니다.
E_INVALIDARG cFunctions가 0이거나 moduleIds 또는 methodIdsNULL입니다.
E_OUTOFMEMORY 메모리 부족 때문에 CLR에서 요청을 완료하지 못했습니다.

설명

RequestReJIT를 호출하여 런타임에서 지정된 함수 집합을 다시 컴파일하도록 합니다. 그러면 코드 프로파일러가 ICorProfilerFunctionControl 인터페이스를 사용하여 함수가 다시 컴파일될 때 생성되는 코드를 조정할 수 있습니다. 이 기능은 현재 실행 중인 함수에는 영향을 주지 않고 이후 함수 호출에만 영향을 줍니다. 지정된 함수가 이전에 JIT 다시 컴파일된 경우 다시 컴파일 요청은 함수를 되돌리고 다시 컴파일하는 것과 같습니다. 되돌리는 기능을 유지하기 위해 JIT 컴파일러는 함수의 원래 버전은 컴파일할 때 인라인 처리 결정을 위해 호출 수신자의 원래 버전만 고려합니다. JIT 컴파일러는 함수를 다시 컴파일할 때 인라인 처리를 위해 호출 수신자의 현재 버전(다시 컴파일된 버전 또는 원래 버전)을 고려합니다.

프로파일러는 일반적으로 프로파일러가 하나 이상의 메서드를 계측하도록 요청하는 사용자 입력에 대한 응답으로 RequestReJIT를 호출합니다. RequestReJIT는 일반적으로 해당 작업의 일부를 수행하기 위해 런타임을 일시 중단하며, 가비지 컬렉션을 트리거할 수 있습니다. 따라서 프로파일러는 현재 프로파일러 콜백을 실행 중인 CLR에서 만든 스레드가 아니라 이전에 만든 스레드에서 RequestReJIT를 호출해야 합니다.

요구 사항

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

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

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

참고 항목