Mam swoją logikę biznesową zaimplementowaną w prostych klasach statycznych z metodami statycznymi. Każda z tych metod otwiera / zamyka połączenie SQL po wywołaniu:
public static void DoSomething(string something)
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
Myślę jednak, że unikanie otwierania i zamykania połączenia oszczędza wydajność . Kilka testów wykonałem już dawno temu z klasą OleDbConnection (nie jestem pewien co do SqlConnection) i zdecydowanie pomogło to tak działać (o ile pamiętam):
//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();
}
}
Pytanie brzmi - czy powinienem wybrać metodę (a) czy metodę (b)? Czytałem na innym pytaniu związanym z przepełnieniem stosu, że buforowanie połączeń zaoszczędziło mi wydajności, nie muszę się wcale przejmować ...
PS. Jest to aplikacja ASP.NET - połączenia istnieją tylko podczas żądania internetowego. Nie jest to aplikacja ani usługa korzystna.
DbConnection.StateChange
zdarzenia, aby monitorować zmiany stanu połączenia (i może być przechowywane lokalnie), zamiastDbConnection.State
bezpośrednio sprawdzać właściwość. Pozwoli to zaoszczędzić koszty wydajności.