다음을 통해 공유


프로파일러 호환성 설정

.NET Framework 버전 4에서는 기본적으로 CLR(공용 언어 런타임)이 .NET Framework 4용으로 작성된 프로파일러만 로드하여 사용합니다. 명시적으로 지정되지 않는 한 CLR에서는 .NET Framework 버전 2.0, 3.0 또는 3.5용으로 작성된 프로파일러를 로드하거나 실행하지 않습니다. 이 항목에서 "버전 2.0 프로파일러"라는 용어는 .NET Framework 버전 2.0, 3.0 및 3.5용으로 작성된 프로파일러를 가리킵니다.

버전 2.0 프로파일러를 원하는 프로파일러 사용자는 COMPLUS_ProfAPI_ProfilerCompatibilitySetting 환경 변수를 사용하여 이 프로파일러 버전을 명시적으로 선택해야 합니다. .NET Framework 4에서 사용되는 버전 2.0 프로파일러는 다음과 같이 동작합니다.

  • .NET Framework 버전 2.0 프로파일링 API는 .NET Framework 4에서도 버전 2.0 설명서대로 계속 작동합니다.

  • 문서화되지 않은 버전 2.0 프로파일링 API 또는 CLR의 동작이 .NET Framework 4에서 정상적으로 수행된다는 보장은 없습니다. 따라서 문서화되지 않은 동작에 종속되는 버전 2.0 프로파일러는 .NET Framework 4에서 작동하지 않을 수도 있습니다. 이 문서에서 설명하는 호환성 설정이 이전 CLR 2.0 동작과의 호환성을 제공하지 않는다는 점에 유의하십시오.

COMPLUS_ProfAPI_ProfilerCompatibilitySetting

COMPLUS_ProfAPI_ProfilerCompatibilitySetting 환경 변수를 설정하기 전에 COR_PROFILER 또는 COR_ENABLE_PROFILING 환경 변수를 설정해야 합니다. 자세한 내용은 프로파일링 환경 설정을 참조하십시오.

COMPLUS_ProfAPI_ProfilerCompatibilitySetting 환경 변수는 다음 표에 나와 있는 세 가지 값 중 하나로 설정할 수 있습니다.

참고참고

.NET Framework 버전 3,5 및 이전 버전의 CLR에서는 COMPLUS_ProfAPI_ProfilerCompatibilitySetting 변수를 지원하지 않습니다.COR_PROFILER 또는 COR_ENABLE_PROFILING 환경 변수가 설정되어 있는 경우 CLR은 항상 프로파일러를 로드하려고 합니다.

설정

CLR 동작

EnableV2Profiler

버전 2.0 프로파일러를 로드하고 활성화합니다.

DisableV2Profiler

버전 2.0 프로파일러를 비활성화하지만 언로드하지는 않습니다. .NET Framework 4 프로파일러에는 영향을 주지 않습니다. 기본 설정입니다.

PreventLoad

프로파일러가 .NET Framework의 어떤 버전용으로 작성되었는지와 상관없이 모든 프로파일러를 로드하지 않습니다.

동작의 자세한 내용은 다음과 같습니다.

  • EnableV2Profiler

    프로파일러가 .NET Framework의 어떤 버전용으로 작성되었는지와 상관없이 .NET Framework 4 CLR은 사용 가능한 프로파일러를 로드하여 사용합니다. in-process side-by-side 프로파일링의 경우 해당 프로세스에서 .NET Framework 버전 2.0 CLR이 프로파일러를 먼저 로드하면 .NET Framework 4은 버전 2.0 프로파일러를 다시 로드하지 않습니다.

  • DisableV2Profiler(기본값)

    .NET Framework 4 CLR에서는 프로파일러를 로드한 후 프로파일러의 IUnknown::QueryInterface 메서드를 호출해 ICorProfilerCallback3 인터페이스를 찾아 프로파일러의 버전을 확인합니다. 

    • 프로파일러가 ICorProfilerCallback3을 구현한 경우 이 프로파일러는 .NET Framework 버전 4 프로파일러이고 CLR에서는 계속 이 프로파일러를 사용합니다.

    • ICorProfilerCallback3을 구현하지 않은 프로파일러는 버전 3.0 프로파일러입니다. 이 경우 CLR에서는 프로파일러 인터페이스를 해제하고 프로파일러를 활성화하지 않습니다. 그러나 CLR은 프로파일러 DLL을 언로드하지 않는 .NET Framework 버전 2.0 CLR과의 호환성을 유지하기 위해 프로파일러 DLL을 언로드하지 않습니다. .NET Framework 4 프로파일러는 분리 또는 종료 시에 언로드되므로 .NET Framework 4용 프로파일러를 수정할 경우 이 동작을 변경해야 합니다.

  • PreventLoad

    .NET Framework 4 CLR에서 프로파일러를 완전히 무시합니다. 이 설정은 일부 in-process side-by-side 시나리오에서 유용합니다. 자세한 내용은 In-Process Side-by-Side 프로파일링을 참조하십시오.

예를 들어, CLR이 .NET Framework 2.0 프로파일러를 로드하게 하려면 명령 프롬프트 창을 열고 다음을 입력합니다.

set COMPLUS_ProfAPI_ProfilerCompatibilitySetting=EnableV2Profiler
참고참고

이 호환성 스위치는 프로파일러 시작 경로에만 영향을 미칩니다.연결-로드 프로파일러의 경우 런타임에서는 ICorProfilerCallback3 인터페이스에 대해 IUnknown::QueryInterface 함수를 호출합니다.버전 2.0 프로파일러와 같이 프로파일러가 이 인터페이스를 구현하지 않는 경우 런타임에서는 해당 프로파일러를 로드하지 않고 프로파일러 로드 실패 항목을 이벤트 로그에 기록합니다.

참고 항목

개념

프로파일링 개요

기타 리소스

.NET Framework 4에서 프로파일링

관리되지 않는 API 참조