다음을 통해 공유


프로파일링 API 기능

업데이트: 2007년 11월

프로파일링 API에서는 CLR(공용 언어 런타임)에서 발생하는 다양한 이벤트와 작업에 대한 정보를 제공합니다. 이 정보를 사용하여 프로세스의 내부 작업을 모니터링하고 .NET Framework 응용 프로그램의 성능을 분석할 수 있습니다.

지원되는 기능

프로파일링 API에서는 CLR에서 발생하는 다음 작업 및 이벤트에 대한 정보를 검색합니다.

  • CLR 시작 및 종료 이벤트

  • 응용 프로그램 도메인 작성 및 종료 이벤트

  • 어셈블리 로딩 및 언로딩 이벤트

  • 모듈 로딩 및 언로딩 이벤트

  • COM vtable 작성 및 소멸 이벤트

  • JIT(Just-In-Time) 컴파일 및 코드 피칭 이벤트

  • 클래스 로딩 및 언로딩 이벤트

  • 스레드 작성 및 소멸 이벤트

  • 함수 시작 및 종료 이벤트

  • 예외

  • 관리 코드 실행과 비관리 코드 실행 간의 전환

  • 다른 런타임 컨텍스트 간의 전환

  • 런타임 일시 중단에 대한 정보

  • 런타임 메모리 힙 및 가비지 수집 활동에 대한 정보

프로파일링 API는 모든 비관리 COM 호환 언어에서 호출할 수 있습니다.

이 API는 CPU 및 메모리 사용 면에서 효율적입니다. 프로파일링에서는 프로파일링된 응용 프로그램이 잘못된 결과를 초래할 만큼 크게 변경되지 않습니다.

프로파일링 API는 샘플링 및 비샘플링 프로파일러 모두에 유용합니다. 샘플링 프로파일러는 일정한 클록 틱(예: 5밀리초)마다 프로파일을 검사하고 비샘플링 프로파일러는 이벤트를 발생시키는 스레드와 동기적으로 해당 이벤트에 대한 알림을 받습니다.

지원되지 않는 기능

프로파일링 API에서는 다음 기능을 지원하지 않습니다.

  • 비관리 코드. CLR 프로파일링 API는 관리 코드에 대해서만 작동합니다. 비관리 코드를 프로파일링하려면 기본 Win32 메커니즘을 사용해야 합니다. 그러나 CLR 프로파일러에는 관리 코드와 비관리 코드의 경계를 결정하는 전환 이벤트가 포함되어 있습니다.

  • 자체 수정 응용 프로그램. 프로파일링 API에서는 관점 지향 프로그래밍과 같은 목적을 위해 자체 코드를 수정하는 응용 프로그램을 지원하지 않습니다.

  • 범위 검사. 프로파일링 API에서는 범위를 검사하는 데 필요한 정보를 제공하지 않습니다. CLR에서는 모든 관리 코드에 대한 범위 검사를 기본적으로 지원합니다.

  • 원격 프로파일링. CLR 코드 프로파일러 인터페이스에서는 다음과 같은 이유 때문에 원격 프로파일링을 지원하지 않습니다.

    • 원격 프로파일링을 수행하면 실행 시간이 늘어나는데 프로파일러 인터페이스를 사용할 때는 프로파일링 결과에 과도한 영향을 주지 않도록 실행 시간을 최소화해야 합니다. 실행 성능을 모니터링하는 경우에는 특히 그렇습니다. 그러나 프로파일러 인터페이스를 사용하여 메모리 사용량을 모니터링하거나 스택 프레임, 개체 등에 대한 런타임 정보를 가져올 경우에는 원격 프로파일링을 사용할 수 있습니다.

    • CLR 코드 프로파일러에서는 프로파일링된 응용 프로그램이 실행되고 있는 로컬 컴퓨터의 런타임에 하나 이상의 콜백 인터페이스를 등록해야 합니다. 이 때문에 원격 코드 프로프일러를 만들 수 있는 기능이 제한됩니다.

  • 고가용성 요구 사항이 있는 프로덕션 환경에서의 프로파일링. 프로파일링 API는 개발 단계에서의 진단을 지원하기 위해 만들어졌으며 프로덕션 환경을 지원하는 데 필요한 엄격한 테스트는 받지 않았습니다.

참고 항목

기타 리소스

.NET Framework에서 프로파일링

프로파일링 개요