MDA de gcManagedToUnmanaged
El asistente para la depuración administrada (MDA) gcManagedToUnmanaged provoca una recolección de elementos no utilizados cada vez que un subproceso pasa de código administrado a no administrado.
Síntomas
Un componente de usuario no administrado produce una infracción de acceso al intentar utilizar un objeto administrado que se había expuesto a COM. El objeto COM parece haber sido liberado. La infracción de acceso es no determinista.
Motivo
Si un objeto no administrado no calcula correctamente las referencias de un objeto COM administrado, Common Language Runtime podría recolectar un objeto administrado expuesto a COM aun cuando el componente no administrado todavía mantenga alguna referencia al objeto. Common Language Runtime llama al método Release durante la recolección de elementos no utilizados, de manera que si el componente de usuario utiliza el objeto antes de que se produzca dicha recolección, en ese momento todavía no habrá sido recolectado. Éste es el origen del no determinismo.
Resolución
Al habilitar este asistente se reduce el tiempo entre el momento en que el objeto es marcado para la recolección de elementos no utilizados y el momento en que se llama al método Release, lo que ayuda a determinar cuál es el componente no administrado que intenta obtener acceso al objeto recolectado en primer lugar.
Efecto en Common Language Runtime
Se produce una recolección de elementos no utilizados cada vez que un subproceso pasa de código administrado a no administrado.
Output
Este asistente para la depuración administrada no produce ningún resultado.
Configuración
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>
Vea también
Referencia
Conceptos
Diagnóstico de errores con ayudantes de depuraciones administradas
Cálculo de referencias de interoperabilidad