İş mantığımı statik yöntemlerle basit statik sınıflarda uyguladım. Bu yöntemlerin her biri çağrıldığında SQL bağlantısını açar / kapatır:
public static void DoSomething(string something)
{
using (SqlConnection connection = new SqlConnection("..."))
{
connection.Open();
// ...
connection.Close();
}
}
Ancak bir bağlantıyı açıp kapatmaktan kaçınmanın performanstan tasarruf ettiğini düşünüyorum . Çok uzun zaman önce OleDbConnection sınıfıyla (SqlConnection hakkında emin değilim) bazı testler yaptım ve kesinlikle böyle çalışmasına yardımcı oldu (hatırladığım kadarıyla):
//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();
}
}
Öyleyse soru şu - (a) yöntemini mi yoksa (b) yöntemini mi seçmeliyim? Başka bir yığın aşımı sorusunda, bağlantı havuzlamasının performansı kaydettiğini okudum, hiç uğraşmam gerekmiyor ...
PS. Bu bir ASP.NET uygulamasıdır - bağlantılar yalnızca bir web isteği sırasında mevcuttur. Kazanma uygulaması veya hizmet değil.
DbConnection.StateChange
kontrol etmek yerine bağlantının durum değişikliğindeki (ve yerel olarak depolanabilir) değişiklikleri izlemek için olayı kullanınDbConnection.State
. Size performans maliyetinden tasarruf sağlayacaktır.