2016-06-20 8 views
0

Ich habe eine C# Multithread-Funktion geschrieben, die Daten von sqlserver liest und für jede Datenzeile einen separaten Thread startet.In jedem Thread habe ich Codes, die mit db arbeiten müssen. das ist, was ich in jedem Thread tun:Sql-Verbindungen in C# Multithreading verwalten

  • eine neue SQL-Verbindung
  • Connect, um es zu erstellen und öffnen Sie sie
  • Arbeit
  • Verbindung schließen Sie
(während es nicht notwendig ist)

Ich sollte beachten, dass ich benutze() -Befehl und ich habe gelesen, dass diese Anweisung sql-Verbindung verwaltet und schließt es automatisch nach der Ausführung des Befehls.

diese Funktion regelmäßig aufgerufen werden soll (etwa alle 1 Minute) und das ist das Problem, das ich in bekommen:

nach der ersten Rufnummer der aktiven SQL-Verbindungen erhöht sich auf Anzahl der Zeilen (Themen, die für jede Zeile erstellt). Im zweiten Anruf erhöht sich diese Nummer erneut. zum Beispiel nach 5 Aufrufen mit 100 Zeilen haben wir 500 aktive SQL-Verbindungen! aber ich habe gelesen, dass Verbindungspooling Verbindungen verwaltet und erstellte Verbindungen wieder verwendet. Was sollte ich tun, um dieses Problem zu lösen? habe ich irgendeine Aussage vermisst oder gibt es etwas zu tun, was ich vergessen habe?

+0

Bitte geben Sie einigen Kontext zu Ihrer Frage. Was versuchst du zu erreichen? Ist das eine Lasttest-Anwendung? – Alex

+0

Es ist ein Überwachungsdienst und ich füge Geräte ein, die auf db überwacht werden sollen, und starte einen neuen Thread für die Überwachung jedes Geräts –

+0

Schauen Sie, ob dies für Ihren Fall relevant ist: http://stackoverflow.com/questions/268982/net -sqlconnection-nicht-geschlossen-gerade-wenn-in-einem-Verwendung – Alex

Antwort

0

Mit nur ist ein Versuch - endlich, nichts mehr, es ruft Dispose und das ist alles.

in a "using" block is a SqlConnection closed on return or exception?

+0

ok, wenn es anruft, warum Verbindungen geöffnet bleiben und nicht nach dem Befehl dispose schließen? –

+0

Es kann wegen des Verbindungspools geöffnet bleiben - https://msdn.microsoft.com/en-us/library/8xx3tyca(v=vs.110).aspx. Sie können die maximale Anzahl der Verbindungen im Pool in der Verbindungszeichenfolge begrenzen: Max. Poolgröße = xxx. Ohne Code-Schnipsel kann ich nicht mehr helfen. – Dexion

+0

Ja Wegen des Verbindungspools, wie kann ich die Zeit beschränken, die Verbindung bleibt? Oder ist es eine schlechte Möglichkeit, das Pooling zu deaktivieren? –