Vor einiger Zeit habe ich eine ORM-Ebene für meine .net-App geschrieben, in der alle Datenbankzeilen durch eine Unterklasse von DatabaseRecord
repräsentiert werden. Es gibt eine Reihe von Methoden wie Load()
, Save()
usw. In meiner ursprünglichen Implementierung erstellte ich eine Verbindung zu der DB im Konstruktor DatabaseRecord
z.Overhead zum Erstellen neuer SqlConnection in C#
connection = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnectionName"].ConnectionString
);
Ich rufe dann Open()
und Close()
an diesem SqlConnection am Anfang und Ende meiner Methoden, die auf die Datenbank zugreifen. Dies schien mir (als jemand, der mit Programmierung vertraut war, aber neu in C# und .net) die effizienteste Art und Weise zu sein, Dinge zu tun - eine Verbindung zu haben und sie innerhalb der Klasse zu öffnen/schließen.
Ich habe gerade etwas zu lesen, obwohl getan und es scheint, dass dieses Muster in einer Reihe von Orten empfohlen:
using (var connection = new SqlConnection(...)) {
connection.Open();
// Stuff with the connection
connection.Close();
}
Ich kann sehen, warum es wünschenswert ist - die Verbindung automatisch Dispose()
ist d auch wenn die Sachen, die du in der Mitte machst, verursachen eine nicht abgefangene Ausnahme. Ich habe mich nur gefragt, was der Overhead ist, um so viele Male wie diese new SqlConnection()
zu nennen.
Connection Pooling ist eingeschaltet, daher stelle ich mir vor, dass der Overhead minimal ist und der zweite Ansatz sollte die beste Vorgehensweise sein, aber ich wollte nur sicherstellen, dass meine Annahmen richtig sind.
Vielen Dank für all die angeordnet ist, unglaublich schnelle Antworten! – vitch