Was sind einige gute Möglichkeiten, um Debug-Timeouts? (C #)
-
05-07-2019 - |
Frage
Ich baue eine Website, die für ein paar Stunden in Ordnung läuft, aber dann * .asmx und * .ashx Anrufe Timing beginnen.
Die Ausnahme ist: „. Timeout abgelaufen Die Timeout-Zeit vor verstrichene eine Verbindung aus dem Pool zur Erlangung dieses eventuell aufgetreten, weil alle zusammengefassten Verbindungen waren im Einsatz und maximale Poolgröße erreicht wurde“
ich SubSonic als ORM bin mit.
Ich vermute, dass das Problem auf einem geplanten Task basiert, die alle paar Minuten läuft und trifft auf die Datenbank. Wenn ich in SQL Server 2000 die „Aktuelle Aktivität“ sehen, sehe ich es:
- 100 Prozesse mit dem Status "schlafender"
- 100 Schlösser
Die 100 Prozesse sind von der Anwendung ".Net SqlClient Data Provider" und der Befehl "WARTEN AUF COMMAND".
So vermute ich, dass das Problem ist. . aber wie kann ich es beheben? Klingt das wie ein Deadlock in der db? Sobald ich
c: \> iisrestart
, alles ist in Ordnung (für eine Weile).
Danke -. Ich habe nur noch nie so etwas wie dieses gestoßen und bin nicht sicher, der beste Weg, um fortzufahren
Michael
Lösung
Es könnte ein Duplikat dieses Problem sein - Ist Verbindungspooling richtig funktioniert in Subsonic?
Wenn Sie Objekte mit Load () statt LoadAndCloseReader () geladen werden, wird jede Verbindung offen gelassen werden, und schließlich werden Sie den Verbindungspool erschöpfen.
Andere Tipps
Wenn Sie Load () auf eine Sammlung nennen es den Reader geöffnet lassen - stellen Sie sicher, rufen LoadAndCloseReader (), wenn Sie den Leser wollen weg schließen -. Oder unter Verwendung eines Block verwenden
Es hilft auch etwas Quellcode zu haben.
Ich weiß nichts über Subsonic, aber vielleicht ‚Kontexte‘ Sie sind undicht Datenbank? Ich würde überprüfen, dass jede Datenbankressource angeordnet ist, wird, nachdem Sie damit fertig ...