gcManagedToUnmanaged MDA

Note

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 gcManagedToUnmanaged Asistente para depuración administrada (MDA) provoca una recolección de elementos no utilizados cada vez que un subproceso pasa de administrado a código 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. Parece que se ha liberado el objeto COM. La infracción de acceso no es determinista.

Causa

Si un componente no administrado no hace referencia al recuento correcto de un objeto COM administrado, el tiempo de ejecución podría recopilar un objeto administrado expuesto a COM cuando el componente no administrado todavía contiene una referencia al objeto . El tiempo de ejecución llama Release durante las recolecciones de elementos no utilizados, por lo que si el componente de usuario usa el objeto antes de que se produzca la recolección de elementos no utilizados, aún no se habrá recopilado. Esta es la fuente del no determinismo.

Resolución

Al habilitar este asistente, se reduce el tiempo entre el momento en que el objeto es apto para la colección y Release se llama a , lo que ayuda a realizar un seguimiento del componente no administrado que intenta acceder primero al objeto recopilado.

Efecto en el tiempo de ejecución

Provoca una recolección de elementos no utilizados cada vez que un subproceso pasa de un código administrado a no administrado.

Output

Este MDA no genera ninguna salida.

Configuration

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

Consulte también