Compartir a través de


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

Referencia

MarshalAsAttribute

MDA de gcUnmanagedToManaged

Otros recursos

Interoperabilidad