Visual Studio: ContextSwitchDeadlock

Habe ich immer eine Fehlermeldung, dass ich nicht lösen kann. Es stammt aus Visual Studio oder den debugger. Ich bin mir nicht sicher, ob der letztendliche Fehler ist im VS der debugger mein Programm oder der Datenbank.

Dies ist eine Windows-Anwendung. Nicht eine web-app.

Erste Nachricht aus VS wird ein popup-Fenster sagt:
"Keine Symbole geladen für jeden Aufruf-stack-frame. Der Quellcode kann nicht angezeigt werden."
Wenn das weggeklickt, bekomme ich:
"ContextSwitchDeadlock erkannt wurde", zusammen mit einer langen Nachricht unten reproduziert.

Der Fehler tritt in einer Schleife durchsucht nach unten eine DataTable. Für jede Zeile, es verwendet einen Schlüssel (HIC #) Wert aus der Tabelle, die als parameter für ein SqlCommand. Der Befehl zum erstellen eines SqlDataReader liefert eine Zeile. Daten verglichen werden. Wenn ein Fehler erkannt wird, wird eine Zeile Hinzugefügt, um eine zweite DataTable.

Der Fehler scheint zu sein, im Zusammenhang damit, wie lange das Verfahren dauert zu laufen (also nach 60 sec), nicht, wie viele Fehler gefunden werden. Ich glaube nicht, dass es ein Speicher-Problem. Keine Variablen deklariert, die innerhalb der Schleife. Die einzigen Objekte, die erstellt werden, sind die SqlDataReaders, und Sie sind Mit Strukturen. System Hinzufügen.GC.Collect() keinen Effekt hatten.

Die db ist eine SQL Server-Website auf dem gleichen laptop.

Es gibt keine ausgefallenen Spielereien oder Spielereien auf dem Formular.

Ich bin mir nicht bewusst irgendetwas in dieser proc ist sehr Verschieden von dem, was ich getan habe Dutzende Male vor. Ich habe den Fehler gesehen, aber noch nie auf einer einheitlichen Grundlage.

Irgendwelche Ideen, jedermann?

Vollständige Fehlertext:
Die CLR nicht in der Lage war, den übergang vom COM-Kontext 0x1a0b88 zum COM-Kontext 0x1a0cf8 für 60 Sekunden. Der thread, der Besitzer der Ziel-Kontext/apartment ist am ehesten entweder eine nicht Pumpen warten oder Verarbeitung eine sehr lange Laufenden Betrieb ohne Pumpen Windows-Meldungen. Diese situation hat in der Regel negative Auswirkungen auf die Leistung und kann sogar dazu führen, dass die Anwendung nicht mehr reagiert oder Speicherauslastung akkumulieren kontinuierlich über die Zeit. Um dieses problem zu vermeiden, werden alle single-threaded apartment (STA) threads verwenden sollten, Pumpen warten primitive (wie CoWaitForMultipleHandles) und routinemäßig Pumpe-Meldungen während der lang andauernden Operationen.

InformationsquelleAutor der Frage SeaDrive | 2009-02-23

Schreibe einen Kommentar