Ich habe eine Fehlermeldung erhalten, die ich nicht beheben kann. Es stammt aus Visual Studio oder dem Debugger. Ich bin nicht sicher, ob die endgültige Fehlerbedingung in VS, dem Debugger, meinem Programm oder der Datenbank liegt.
Dies ist eine Windows-App. Keine Web-App.
Die erste Nachricht von VS ist ein Popup-Fenster mit der Aufschrift: "Für keinen Aufrufstapel-Frame werden Symbole geladen. Der Quellcode kann nicht angezeigt werden." Wenn das weggeklickt wird, erhalte ich: " ContextSwitchDeadlock wurde erkannt ", zusammen mit einer langen Nachricht, die unten wiedergegeben wird.
Der Fehler tritt in einer Schleife auf, die eine DataTable durchsucht. Für jede Zeile wird ein Schlüsselwert (HIC #) aus der Tabelle als Parameter für einen SqlCommand verwendet. Mit dem Befehl wird ein SqlDataReader erstellt, der eine Zeile zurückgibt. Daten werden verglichen. Wenn ein Fehler erkannt wird, wird eine Zeile zu einer zweiten Datentabelle hinzugefügt.
Der Fehler scheint damit zu tun zu haben, wie lange die Prozedur dauert (dh nach 60 Sekunden), und nicht damit, wie viele Fehler gefunden werden. Ich denke nicht, dass es ein Speicherproblem ist. Innerhalb der Schleife werden keine Variablen deklariert. Die einzigen Objekte, die erstellt werden, sind die SqlDataReaders und befinden sich unter Verwenden von Strukturen. Das Hinzufügen von System.GC.Collect () hatte keine Auswirkung.
Die Datenbank ist eine SqlServer-Site auf demselben Laptop.
Das Formular enthält keine ausgefallenen Spielereien oder Gadgets.
Mir ist nichts in diesem Prozess bekannt, was sich stark von dem unterscheidet, was ich Dutzende Male zuvor getan habe. Ich habe den Fehler schon einmal gesehen, aber nie auf einer konsistenten Basis.
Irgendwelche Ideen, irgendjemand?
Vollständiger Fehlertext: Die CLR konnte 60 Sekunden lang nicht vom COM-Kontext 0x1a0b88 zum COM-Kontext 0x1a0cf8 wechseln. Der Thread, dem der Zielkontext / die Zielwohnung gehört, führt höchstwahrscheinlich entweder eine Wartezeit ohne Pumpen durch oder verarbeitet einen sehr lang laufenden Vorgang, ohne Windows-Nachrichten zu pumpen. Diese Situation wirkt sich im Allgemeinen negativ auf die Leistung aus und kann sogar dazu führen, dass die Anwendung nicht mehr reagiert oder sich die Speichernutzung im Laufe der Zeit kontinuierlich ansammelt. Um dieses Problem zu vermeiden, sollten alle Single-Threaded-Apartment-Threads (STA-Threads) Pump-Wait-Grundelemente (wie CoWaitForMultipleHandles) verwenden und Nachrichten bei langen Betriebsabläufen routinemäßig pumpen.