.NET profiling API로 함수 실행시간 구하기
개요
APM(Application Performance Management)에 관해서 공부하는 중 함수의 실행 시간 및 계층 구조 뷰 출력 부분을 직접 구현하기 위한 스터디 한 자료를 정리합니다.
원하는 닷넷 어플리케이션 내부의 이벤트를 감시하거나 내부 정보를 가져오기 위해서는 ICorProfilerCallback과 ICorProfilerInfo를 이용해서 Profiler를 만들고 등록해줘야 합니다.
닷넷 프래임워크에게 지금 등록해준 Profiler에게 이벤트를 전달해달라고 요청하는 과정으로 이해하시면 됩니다.
닷넷 프레임워크에서 이벤트가 발생하면 ICorProfilerCallback 구현코드가 call back 형식으로 실행됩니다. 우리는 원하는 이벤트를 감시하기 위해서 ICorProfilerCallback의 메소드 중 하나를 선택해서 코드를 구현하기만 하면 되는 것이죠.
ICorProfilerInfo의 경우에는 닷넷 내부 정보를 알고 싶을 때 사용하게 되는데요. 예를 들면 방금 실행된 함수의 이름을 알고 싶다면 ICorProfilerInfo.GetTokenAndMetaDataFromFunction() 메소드를 사용해서 함수의 정보를 가져올 수 있습니다.
ICorProfilerCallback과 ICorProfilerInfo의 세부 정보는 아래 링크를 참고하시기 바랍니다.
Profiler 작성하기
Profiler는 아래와 같이 크게 4개의 파트로 나누어집니다.
- ALT main
- COM 프로젝트의 기본적인 구성 요소
- 대부분 자동 생성되는 코드 (일부 수정 필요)
- ProfilerCallback
- 닷넷 프레임워크(CLR)에서 보내지는 이벤트를 수신 처리
- ICorProfilerInfo 참조 가져오기
- MethodList