Ich habe meine Geschäftslogik in einfachen statischen Klassen mit statischen Methoden implementiert. Jede dieser Methoden öffnet / schließt die SQL-Verbindung, wenn sie aufgerufen wird:
public static void DoSomething(string something)
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
Ich denke jedoch, dass das Vermeiden des Öffnens und Schließens einer Verbindung die Leistung spart . Ich habe vor einiger Zeit einige Tests mit der OleDbConnection- Klasse durchgeführt ( ich bin mir bei SqlConnection nicht sicher), und es hat definitiv geholfen, so zu funktionieren (soweit ich mich erinnere):
//pass the connection object into the method
public static void DoSomething(string something, SqlConnection connection)
{
bool openConn = (connection.State == ConnectionState.Open);
if (!openConn)
{
connection.Open();
}
// ....
if (openConn)
{
connection.Close();
}
}
Die Frage ist also: Soll ich die Methode (a) oder die Methode (b) wählen? Ich habe in einer anderen Frage zum Stackoverflow gelesen, dass das Verbindungspooling die Leistung für mich gespart hat. Ich muss mich überhaupt nicht darum kümmern ...
PS. Es ist eine ASP.NET-App - Verbindungen bestehen nur während einer Webanforderung. Keine Win-App oder Service.
DbConnection.StateChange
Ereignis, um Änderungen der Statusänderung der Verbindung zu überwachen (und möglicherweise lokal zu speichern), anstatt dieDbConnection.State
Eigenschaft direkt zu überprüfen . Sie sparen Leistungskosten.