MDA de gcManagedToUnmanaged
Actualización: noviembre 2007
El Ayudante 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 activar 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.
Resultados
Este Ayudante para la depuración administrada no produce ningún resultado.
Configuración
<mdaConfig>
<assistants>
<gcManagedToUnmanaged/>
</assistants>
</mdaConfig>
Vea también
Conceptos
Diagnóstico de errores con ayudantes de depuraciones administradas
Información general acerca del cálculo de referencia de interoperabilidad