Personas que lo han encontrado útil: 0 de 3 - Valorar este tema

ContextSwitchDeadlock

El Ayudante para la depuración administrada (MDA) de ContextSwitchDeadlock se activa cuando se detecta un interbloqueo durante la transición del contexto COM.

El síntoma más común consiste en que una llamada realizada en un componente COM no administrado por parte de código administrado no vuelve. Otro síntoma es una mayor utilización de la memoria de forma progresiva.

La causa más probable es que un subproceso del apartamento de un único subproceso (STA) no está proporcionando mensajes. El subproceso STA o está esperando sin proporcionar mensajes o está realizando operaciones largas y no está permitiendo que la cola de mensajes siga su curso normal.

La mayor utilización de la memoria se debe al subproceso del finalizador que está intentando realizar una llamada a Release en un componente COM no administrado y a que dicho componente no está siendo devuelto. Esto evita que el finalizador reclame otros objetos.

De forma predeterminada, el modelo de subprocesamiento para el subproceso principal de las aplicaciones de consola de Visual Basic es STA. Se activa este Ayudante para la depuración administrada si un subproceso STA utiliza directa o indirectamente la interoperabilidad COM a través de Common Language Runtime o un control de otro fabricante. Para evitar su activación en una aplicación de consola de Visual Basic, aplique el atributo MTAThreadAttribute al método principal o modifique la aplicación para que proporcione mensajes.

Es posible que este Ayudante se active falsamente cuando se cumplen todas las condiciones siguientes:

  • Una aplicación crea componentes COM a partir de subprocesos STA, ya sea directa o indirectamente a través de bibliotecas.

  • La aplicación se detuvo en el depurador y el usuario continuó la aplicación o realizó una operación paso a paso.

  • No está habilitada la depuración no administrada.

Para determinar si el Ayudante para la depuración administrada se activa falsamente, deshabilite todos los puntos de interrupción, reinicie la aplicación y permita que se ejecute sin detenerse. Si no se activa el Ayudante para la depuración administrada, es probable la activación inicial fuese falsa. En este caso, deshabilite el Ayudante para la depuración administrada para evitar interferencias con la sesión de depuración.

Siga las reglas COM relacionadas con la distribución de mensajes STA.

Este MDA no tiene ningún efecto en el CLR. Sólo comunica datos sobre contextos COM.

Mensaje que describe el contexto actual y el contexto de destino.

<mdaConfig>
  <assistants>
    <contextSwitchDeadlock enable="false" />
  </assistants>
</mdaConfig>
¿Le ha resultado útil?
(Caracteres restantes: 1500)
Contenido de la comunidad Agregar