Ich bin von Java Erfahrung gekommen und versuche mit C # anzufangen. Ich habe gelesen SqlConnection SqlCommand SqlDataReader IDisposable und ich kann verstehen, dass die beste Vorgehensweise zum Herstellen einer Verbindung zu einem Die DB umschließt SqlConnection
, SqlCommand
und SqlDataReader
in ihrem eigenen using
-Block.
Aber in Java kapseln wir die Verbindung in eine Factory-Methode, erstellen sie nur einmal und verwenden sie für alle Abfragen, auch für Multithreads. Für jede Abfrage werden nur Anweisungen und Ergebnismengen erstellt und so schnell wie möglich geschlossen.
Wird für jede Abfrage kein neuer SqlConnection
erstellt? Kann es nicht wiederverwendet werden?
Das Erstellen einer neuen Instanz der Klasse SqlConnection
erstellt keine neue Netzwerkverbindung zu SQL Server, sondern least eine bestehende Verbindung (oder erstellt eine neue). .NET übernimmt das physische Verbindungs-Pooling für Sie.
Wenn Sie Ihre Verbindung beendet haben (über die Sie mehrere Abfragen senden können), geben Sie einfach Close()
oder Dispose()
ein (oder verwenden Sie vorzugsweise einen using{}
-Block).
Es ist nicht erforderlich und nicht empfehlenswert, Instanzen der Klasse SqlConnection
zwischenzuspeichern.
MS SQL-Server verwaltet Verbindungen in seinem eigenen Verbindungspool und sie werden nicht wirklich entsorgt. Sie sind jedoch geschlossen, sodass Sie den Netzwerkverkehr minimieren und die verfügbaren Verbindungen zu Ihrem Server freigeben.
Wenn Sie Linq-To-SQL verwenden, wird der Datenkontext die Verbindung erst freigeben, wenn sie entsorgt wird. Ich schlage vor, dass Sie nur bereits funktionierenden Code verwenden und nicht selbst versuchen, ihn zu optimieren.
Ja, Sie können eine globale SqlConnection-Instanz erstellen. In meinem Fall verwende ich die SqlConnection als Mitglied meines DataContext, auf den ich über Singleton zugreife.
%Vor%Sie können Ihre Transaktionen kapseln, indem Sie diese Verbindung schließen und öffnen, d. h .:
%Vor%Oder Sie lassen die Verbindung offen, sondern beginnen und beenden Transaktionen stattdessen:
%Vor%Tags und Links .net c# connection-pooling sqlconnection idisposable