Best practice für die Wiederverwendung SqlConnection
Habe ich von Java-Erfahrung und versuche zu starten mit C#. Ich habe gelesen, SqlConnection SqlCommand SqlDataReader IDisposable und ich kann verstehen, dass die beste Praxis, eine Verbindung zu einem DB-umbricht SqlConnection
, SqlCommand
und SqlDataReader
im eigenen using
block.
Aber in Java wir verwenden, um Kapseln die Verbindung in einer Fabrik-Methode, erstellen Sie nur einmal, und wiederverwenden es für alle Abfragen, auch Multithread-ones. Nur statements und Resultsets erstellt für jede Abfrage und so schnell wie möglich geschlossen.
Ist nicht die Schaffung einer neuen SqlConnection
für jede Abfrage ein bisschen übertrieben? Kann es nicht wiederverwendet werden?
- man könnte ein pooling-Mechanismus
- msdn.microsoft.com/en-us/library/8xx3tyca%28v=vs.110%29.aspx
- Die .net framework stellt die pooling-Mechanismus für Sie (das ist, warum die Beratung ist immer ein
using
block) - Stellen Sie sicher, dass Sie Fehler behandeln der Verbindung, und im Finally-block schließen. Sonst werden Sie wind-up mit verwaisten verbindungen, ziehen Sie Ihre Leistung nach unten.
- nicht, wenn seine eingehüllt in einen using-block verwenden, versuchen Sie, schließlich ist nicht erforderlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen einer neuen Instanz der Klasse
SqlConnection
nicht erstellen Sie eine neue Netzwerk-Verbindung zu SQL-Server, aber leases eine bestehende Verbindung an (oder erstellt einen neuen). .NET behandelt die physikalischen Verbindungs-pooling für Sie.Wenn Sie fertig sind mit Ihrer Verbindung (durch die Sie können senden mehrere Abfragen) nur
Close()
oderDispose()
(oder verwenden Sie eineusing{}
block vorzugsweise).Gibt es keine Notwendigkeit, und nicht gute Praxis, um die cache-Instanzen der
SqlConnection
Klasse.ManagedThreadId
.MS SQL server verwaltet die verbindungen in einem eigenen Verbindungs-pool, und Sie sind nicht wirklich entsorgt. Aber Sie sind geschlossen, so dass Sie den Netzwerkverkehr minimieren, und lassen Sie die verfügbaren verbindungen auf Ihrem server.
Sie sollten auch beachten, dass, wenn Sie mithilfe der Linq-To-SQL, die Daten Kontext wird nicht lassen Sie die Verbindung, bis Sie entsorgt werden, so schlage ich vor, Sie verwenden bereits funktionierenden code und versuchen Sie nicht, es zu optimieren, durch sich selbst.
using
, etc), und ganz vielleicht garbage Collection (nicht-determinstic etc), aber zugrunde nicht verwaltete Verbindung bleibt openAls VMAtm gesagt hat .net-Pools die verbindungen auf eigene, so ist es vollkommen ok, um Sie neu erstellen. Als solche habe ich in der Regel schreiben Sie ein wrapper für den gesamten Prozess, wie dieser.
Beantworten Ihre spezifische Frage, die Sie wiederverwenden können eine
SqlConnection
für jede Abfrage. So stellen Sie sicher, schließen Sie Ihre aktuelle Abfrage (SqlDataReader
usw.) bevor Sie einen anderen auszuführen, dh. wickeln Sie Sie in Ihren eigenenusing
Blöcke.Ja, können Sie eine Globale SqlConnection-Instanz. In meinem Fall habe ich die Verwendung der SqlConnection-als Mitglied meiner DataContext, dass ich den Zugriff über Singleton.
Können Sie Kapseln Ihre Transaktionen durch das schließen und öffnen dieser Verbindung, D. H.:
Oder Sie können die Verbindung offen lassen, sondern insbesondere Beginn und Ende von Transaktionen: