런타임에 프로파일러를 분리하도록 지시합니다.
HRESULT RequestProfilerDetach(
[in] DWORD dwExpectedCompletionMilliseconds);
매개 변수
- dwExpectedCompletionMilliseconds
[in] 프로파일러를 안전하게 언로드할 수 있는지 여부를 확인하기 전에 CLR(공용 언어 런타임)이 기다려야 하는 시간(밀리초)입니다. 이 매개 변수에 대한 자세한 내용은 설명 부분 및 프로파일러 연결 및 분리를 참조하십시오.
반환 값
이 메서드는 메서드 오류를 나타내는 HRESULT 오류뿐만 아니라 다음과 같은 특정 HRESULT를 반환합니다.
HRESULT |
설명 |
---|---|
S_OK |
분리 요청은 유효하며 지금 다른 스레드에서 분리 절차를 진행하는 중입니다. 분리가 완료되면 ProfilerDetachSucceeded 이벤트가 발생합니다. |
E_ CORPROF_E_CALLBACK3_REQUIRED |
프로파일러에서 분리 작업을 지원하기 위해 구현해야 하는 ICorProfilerCallback3 인터페이스에 대한 IUnknown::QueryInterface 시도가 실패했습니다. 따라서 분리 작업이 시도되지 않았습니다. |
CORPROF_E_IMMUTABLE_FLAGS_SET |
프로파일러가 시작될 때 변경할 수 없는 플래그를 설정했기 때문에 분리가 불가능합니다. 따라서 분리 작업이 시도되지 않았고 프로파일러는 여전히 완전히 연결된 상태에 있습니다. |
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT |
프로파일러에서 계측된 MSIL(Microsoft Intermediate Language) 코드를 사용했거나 enter/leave 후크를 삽입했기 때문에 분리가 불가능합니다. 따라서 분리 작업이 시도되지 않았고 프로파일러는 여전히 완전히 연결된 상태에 있습니다. 참고 계측된 MSIL 코드는 SetILFunctionBody 메서드를 사용하여 프로파일러에서 제공하는 코드입니다. |
CORPROF_E_RUNTIME_UNINITIALIZED |
관리되는 응용 프로그램에서 런타임이 아직 초기화되지 않았습니다. 즉, 런타임이 완전히 로드되지 않았습니다. 이 오류 코드는 프로파일러 콜백의 ICorProfilerCallback::Initialize 메서드 내에서 분리가 요청되는 경우 반환될 수 있습니다. |
CORPROF_E_UNSUPPORTED_CALL_SEQUENCE |
RequestProfilerDetach가 지원되지 않는 시간에 호출되었습니다. 이 오류는 메서드가 관리되는 스레드에서 호출되지만 호출 위치가 가비지 수집을 허용하지 않은 ICorProfilerCallback 메서드나 ICorProfilerCallback 메서드의 내부가 아닌 경우에 발생합니다. 자세한 내용은 CORPROF_E_UNSUPPORTED_CALL_SEQUENCE HRESULT을 참조하십시오. |
설명
분리 절차 중에 분리 스레드(프로파일러 분리를 위해 특별히 만든 스레드)에서 모든 스레드가 프로파일러의 코드를 종료했는지 여부를 확인하는 경우가 있습니다. 프로파일러는 dwExpectedCompletionMilliseconds 매개 변수를 통해 이 작업의 예상 소요 시간을 제공해야 합니다. 이 값으로 프로파일러가 지정된 ICorProfilerCallback* 메서드 안에서 보내는 평균 시간을 사용할 수 있습니다. 이 값은 프로파일러가 보내는 예상되는 최대 시간의 절반보다 커야 합니다.
분리 스레드는 dwExpectedCompletionMilliseconds를 사용하여 프로파일러 콜백 코드가 모든 스택에서 팝되었는지 여부를 확인하기 전에 대기해야 하는 시간을 결정합니다. 이후 CLR 릴리스에서 다음 알고리즘의 세부 정보가 변경될 수 있더라도, 프로파일러를 안전하게 언로드할 수 있는 시기를 결정할 때 dwExpectedCompletionMilliseconds를 사용하는 한 가지 방법을 설명합니다. 분리 스레드는 처음 dwExpectedCompletionMilliseconds밀리초 동안 대기합니다. 대기 시간이 끝난 후에도 프로파일러 콜백 코드가 계속 있으면 분리 스레드가 다시 대기합니다. 이 경우 대기 시간은 dwExpectedCompletionMilliseconds 밀리초의 2배입니다. 두 번째 대기 시간이 끝난 후에도 프로파일러 콜백 코드가 계속 있으면 분리 스레드는 10분 동안 대기했다가 다시 확인합니다. 분리 스레드가 10분마다 계속 다시 확인합니다.
프로파일러에서 dwExpectedCompletionMilliseconds를 0으로 지정한 경우 CLR에서는 기본값인 5000을 사용합니다. 이는 확인 작업을 5초 후에 수행하고 10초 후에 다시 수행한 다음 이후부터는 10분마다 수행함을 의미합니다.
프로파일러 분리에 대한 자세한 내용은 프로파일러 연결 및 분리를 참조하십시오.
요구 사항
플랫폼: .NET Framework 시스템 요구 사항 참조
헤더: CorProf.idl, CorProf.h
라이브러리: CorGuids.lib
.NET Framework 버전: 4