업데이트: 2007년 11월
CLR(공용 언어 런타임)에서 ICorProfilerCallback 인터페이스의 특정 메서드를 호출할 때 런타임에서는 프로파일러가 해당 호출에서 컨트롤을 반환해야 가비지 수집을 수행할 수 있습니다. 이는 프로파일링 서비스에서 가비지 수집에 대해 안전한 상태로 스택을 생성하지 못하는 경우도 있기 때문입니다. 대신 콜백에는 가비지 수집을 사용할 수 없습니다. 이러한 경우 프로파일러에서 최대한 빨리 컨트롤을 반환해야 합니다. 이 상황은 다음과 같은 콜백에 적용됩니다.
ICorProfilerCallback::ExceptionOSHandlerEnter, ICorProfilerCallback::ExceptionOSHandlerLeave
ICorProfilerCallback::ExceptionUnwindFunctionEnter, ICorProfilerCallback::ExceptionUnwindFunctionLeave
ICorProfilerCallback::ExceptionUnwindFunctionEnter, ICorProfilerCallback::ExceptionUnwindFunctionLeave
ICorProfilerCallback::ExceptionCatcherEnter, ICorProfilerCallback::ExceptionCatcherLeave
ICorProfilerCallback::ExceptionCLRCatcherFound, ICorProfilerCallback::ExceptionCLRCatcherExecute
ICorProfilerCallback::COMClassicVTableCreated, ICorProfilerCallback::COMClassicVTableDestroyed
또한 다음 콜백에서는 프로파일러가 fIsSafeToBlock 매개 변수를 사용하여 호출별로 가비지 수집을 블로킹할 수 있습니다.
프로파일러에서 가비지 수집을 블로킹하지 않을 경우 가비지 수집을 지연합니다. 프로파일러가 가비지 수집을 트리거하거나 관리되는 힙의 공간을 할당하는 CLR 함수를 호출하지 않으면 가비지 수집을 지연해도 아무 지장이 없습니다.