Compartir vía


MDA de gcManagedToUnmanaged

Nota:

Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.

El asistente para la depuración administrada (MDA) gcManagedToUnmanaged produce una recolección de elementos no utilizados siempre que un subproceso realiza la transición de código administrado a no administrado.

Síntomas

Un componente de usuario no administrado produce una infracción de acceso al intentar usar un objeto administrado que se había expuesto a COM. El objeto COM aparece como liberado. La infracción de acceso es no determinista.

Causa

Si un componente no administrado no cuenta correctamente las referencias de un objeto COM administrado, CLR podría recopilar un objeto administrado expuesto a COM cuando el componente no administrado todavía contiene una referencia al objeto. Como CLR llama a Release durante las recolecciones de elementos no utilizados, si el componente de usuario utiliza el objeto antes de que se produzca la recolección de elementos no utilizados, aún no se habrá recolectado. Este es el origen del no determinismo.

Solución

Habilitar este asistente reduce el tiempo entre el momento en que el objeto es apto para la recolección y el momento en que se llama a Release, lo que ayuda a realizar un seguimiento de qué componente no administrado intenta acceder primero al objeto recolectado.

Efecto en el Runtime

Produce una recolección de elementos no utilizados siempre que un subproceso realice la transición de código administrado a no administrado.

Output

Este MDA no produce ninguna salida.

Configuración

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

Consulte también