ICorProfilerInfo3::RequestProfilerDetach 메서드

런타임에 프로파일러를 분리하도록 지시합니다.

구문

HRESULT RequestProfilerDetach(
   [in] DWORD    dwExpectedCompletionMilliseconds);

매개 변수

dwExpectedCompletionMilliseconds[in] CLR(공용 언어 런타임)은 프로파일러를 언로드하는 것이 안전한지 확인하기 위해 검사 전에 대기해야 하는 시간(밀리초)입니다.

Return Value

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

HRESULT 설명
S_OK 분리 요청이 유효하고 분리 절차는 다른 스레드에서 계속 진행됩니다. 분리가 완료되면 ProfilerDetachSucceeded 이벤트가 발생합니다.
E_CORPROF_E_CALLBACK3_REQUIRED 프로파일러가 분리 작업을 지원하려면 구현해야 하는 ICorProfilerCallback3 인터페이스에 대한 IUnknown::QueryInterface 시도에 실패했습니다. 분리가 시도되지 않았습니다.
CORPROF_E_IMMUTABLE_FLAGS_SET 프로파일러가 시작 시 변경할 수 없는 플래그를 설정하므로 분리가 불가능합니다. 분리가 시도되지 않았고 프로파일러가 완전히 연결됩니다.
CORPROF_E_IRREVERSIBLE_INSTRUMENTATION_PRESENT 프로파일러가 계측된 CIL(공용 중간 언어) 코드 또는 삽입된 enter/leave 후크를 사용했기 때문에 분리가 불가능합니다. 분리가 시도되지 않았고 프로파일러가 완전히 연결됩니다.

참고 계측된 CIL은 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밀리초 동안 대기합니다. 대기에서 활성화된 후에 CLR은 프로파일러 콜백 코드가 아직 있다는 것을 확인하면 분리 스레드는 다시 대기하고, 이번에는 2배인 dwExpectedCompletionMilliseconds 밀리초 동안 대기합니다. 이 두 번째 대기에서 활성화된 후 분리 스레드는 프로파일러 콜백 코드가 아직 있다는 것을 확인하면 다시 확인하기 전에 10분 동안 대기합니다. 분리 스레드는 10분마다 계속 다시 확인합니다.

프로파일러가 dwExpectedCompletionMilliseconds를 0(영)으로 지정하면 CLR은 5초 후, 다시 10초 후, 이후 10분마다 확인을 수행할 것임을 의미하는 기본값 5000을 사용합니다.

요구 사항

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

헤더: CorProf.idl, CorProf.h

라이브러리: CorGuids.lib

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

참고 항목