다음을 통해 공유


gcManagedToUnmanaged MDA

스레드가 관리 코드에서 비관리 코드로 전환될 때마다 gcManagedToUnmanaged MDA(관리 디버깅 도우미)가 가비지 수집을 발생시킵니다.

증상

COM에 노출된 관리되는 개체를 사용하려 하면 관리되지 않는 사용자 구성 요소에서 액세스 위반이 throw됩니다. COM 개체는 해제된 것으로 표시됩니다. 액세스 위반은 불명확합니다.

원인

관리되지 않는 구성 요소가 관리되는 COM 개체의 참조 횟수를 올바로 구현하지 않는 경우 관리되지 않는 구성 요소가 개체에 대한 참조를 계속 보유하고 있는 동안 런타임은 COM에 노출된 관리되는 개체를 수집할 수 있습니다. 런타임은 가비지를 수집하는 동안 Release를 호출하므로 가비지 수집이 발생하기 전에 사용자 구성 요소가 개체를 사용하는 경우 가비지가 수집되지 않습니다. 이것이 불명확함의 원인입니다.

해결 방법

이 도우미를 사용하면 수집된 개체에 액세스하려고 처음으로 시도하는 관리되지 않는 구성 요소를 추적할 수 있도록 하여 개체가 수집 대상이 되고부터 Release가 호출되기까지의 시간을 줄일 수 있습니다.

런타임 효과

스레드가 관리 코드에서 비관리 코드로 전환할 때마다 가비지 수집을 발생시킵니다.

Output

이 MDA는 출력이 없습니다.

구성

<mdaConfig>
  <assistants>
    <gcManagedToUnmanaged/>
  </assistants>
</mdaConfig>

참고 항목

참조

MarshalAsAttribute

gcUnmanagedToManaged MDA

개념

관리 디버깅 도우미를 사용하여 오류 진단

Interop 마샬링

기타 리소스

상호 운용성