Recibí un mensaje de error que no puedo resolver. Se origina en Visual Studio o el depurador. No estoy seguro de si la condición de error final está en VS, el depurador, mi programa o la base de datos.
Esta es una aplicación de Windows. No es una aplicación web.
El primer mensaje de VS es un cuadro emergente que dice: "No se cargan símbolos para ningún marco de la pila de llamadas. El código fuente no se puede mostrar". Cuando se hace clic, aparece : " Se detectó ContextSwitchDeadlock ", junto con un mensaje largo que se reproduce a continuación.
El error surge en un bucle que escanea una DataTable. Para cada línea, utiliza un valor clave (HIC #) de la tabla como parámetro para un SqlCommand. El comando se usa para crear un SqlDataReader que devuelve una línea. Los datos son comparados. Si se detecta un error, se agrega una fila a una segunda DataTable.
El error parece estar relacionado con el tiempo que tarda el procedimiento en ejecutarse (es decir, después de 60 segundos), no con cuántos errores se encuentran. No creo que sea un problema de memoria. No se declaran variables dentro del ciclo. Los únicos objetos que se crean son los SqlDataReaders, y están en Usar estructuras. Agregar System.GC.Collect () no tuvo ningún efecto.
El db es un sitio SqlServer en la misma computadora portátil.
No hay artilugios o artilugios sofisticados en el formulario.
No estoy al tanto de nada en este proceso que sea muy diferente de lo que he hecho docenas de veces antes. He visto el error antes, pero nunca de manera consistente.
Alguna idea, alguien?
Texto de error completo: el CLR no ha podido realizar la transición del contexto COM 0x1a0b88 al contexto COM 0x1a0cf8 durante 60 segundos. El subproceso que posee el contexto / apartamento de destino probablemente esté haciendo una espera sin bombeo o procesando una operación de ejecución muy larga sin bombear mensajes de Windows. Esta situación generalmente tiene un impacto negativo en el rendimiento e incluso puede hacer que la aplicación deje de responder o que el uso de memoria se acumule continuamente con el tiempo. Para evitar este problema, todos los subprocesos de apartamento de un solo subproceso (STA) deben usar primitivas de espera de bombeo (como CoWaitForMultipleHandles) y mensajes de bombeo rutinarios durante operaciones de larga ejecución.