Aparece un mensaje de error que no puedo resolver. Se origina en Visual Studio o en 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.Visual Studio: ContextSwitchDeadlock
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 pila de llamadas. No se puede mostrar el código fuente". Cuando se hace clic, obtengo: "ContextSwitchDeadlock se detectó", junto con un mensaje largo que se reproduce a continuación.
El error se produce en un bucle que explora una DataTable. Para cada línea, utiliza un valor de 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 un segundo DataTable.
Parece que el error está relacionado con la duración del procedimiento (es decir, después de 60 segundos), no 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 Uso de 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 de lujo en el formulario.
No conozco 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 constante.
¿Alguna idea, alguien?
texto de error completo: El CLR no ha sido capaz de hacer la transición a partir del contexto COM 0x1a0b88 al contexto COM 0x1a0cf8 durante 60 segundos. El hilo que posee el contexto/apartamento de destino probablemente esté haciendo una espera de no bombeo o procesando una operación de muy larga ejecución sin bombear mensajes de Windows. Esta situación generalmente tiene un impacto negativo en el rendimiento e incluso puede llevar a que la aplicación no responda o el uso de la memoria se acumule continuamente a lo largo del tiempo. Para evitar este problema, todos los subprocesos de apartamento de rosca única (STA) deben usar primitivas de espera de bombeo (como CoWaitForMultipleHandles) y rutinariamente bombear mensajes durante operaciones de larga ejecución.
justo en! Gracias. Tuve que ir a Personalizar y agregar excepciones al menú Depurar. No es el aspecto más intuitivo de la interfaz de usuario. Herramientas \ Personalizar, luego reorganizar comandos (botón), luego Seleccionar depuración del menú desplegable en la esquina superior derecha, luego Agregar (botón). ¡Uf! – SeaDrive
Sí, parece que algunas instalaciones tienen eso en el menú y otras no. Lo he visto también con otros elementos útiles del menú, y aún tengo que descubrir qué los enciende o los apaga por defecto. – Pedro
'ctrl-alt-e' trae el diálogo de excepción. –