listBox1.Items.Clear();
SqlConnection con = new SqlConnection("Server=.\\BLACK;Database=Northwind;Trusted_Connection=true;Pooling=False");
DateTime dtBaslangic = DateTime.Now;
for (int i = 0; i
< 1000; i++)
{
con.Open();
con.Close();
}
listBox1.Items.Add((DateTime.Now -
dtBaslangic).TotalMilliseconds.ToString());
Örnekte 1000 tane bağlantımı açıp kapattım.5 saniyemi aldı beklemesi biraz sıkıcı oldu.Belkide başınıza hiç gelmemiştir bunun nedeni Default olarak Pooling True gelmesindendir.Başka Defaultlarıda vardır.Bunları birkaç örnek sonra sizlere göstericem.
Örnekte Başlangıcı DateTime.Now diyerek alıyorum ve bitişinde de tekrar anı yakalayıp başlangıç saatimi ondan çıkarıyorum sonucunda detaylı görülebilmesi için milisaniye cinsinden listboxıma aktarıyorum.Burda Pooling Değerimi True yaptığımda ise inanılmaz bir fark oluyor arkadaşlar.Resimlerle göstereyim.
Resimleri pek güzel kesip parçalayamadım ama üstteki False olan milisaniye cinsinden büyük bi zaman farklı olmuş arkadaşlar.Alttakinde ise zaman çok az geçmiş çok hızlı bir şekilde bağlantı işlemlerini gerçekleştiriyor.
Bir başka bilinçli olarak kullanmadığımız özelliğine daha değinicem arkadaşlar aslında gizliden gizliye bizi bu max pool size diye kısıtlıyor.Default olarka Maximum Açık Bağlantı Sayımız 100 dür arkadaşlar.Kapatmadığımızda bağlantılarımızı ve açmaya devam ettiğimizde maximum sayıya ulaştığımız ve geçmeye çalıştığımız taktirde hata alırız.Sevdiğim bir söz var bir makalede okuduğum.Database bağlantılarında durumumuz şöyle olmalı "mümkün olduğunca geç bağlan,erken çık".
Bir tane deneme yapalım bağlantıları kapatmayıp patlayalım arkadaşlar.
for (int i = 0; i
< 1000; i++)
{
SqlConnection con = new SqlConnection("Server=.\\BLACK;Database=Northwind;Trusted_Connection=true;Pooling=True;max
pool size=50;");
con.Open();
}
Patladığımın resmini görüyorsunuz arkadaşlar. Visual Studio burda bana kızıyor.Bağlantı açmışım kapatmamışım maximum 50 tane bağlantı kurucam demişim.ama ben 1000 tane kurmaya çalımışım.Burası çok önemli arkadaşlar çünkü açtığımız her bağlantıyı kapatmamız gerekli.Her açık bağlantı sistem kaynağından tüketir.O zaman şu soru geliyor benim aklıma max pool size ı arttıralım geçelim.Arttıralımda her güzel şeyin birde kötü tarafı vardır arkadaşlar . Burda Connection Pooling işlemi kullanıyoruz ve bu bizim belleğimizden yiyor.Projemizin yapısına göre ihtiyaca göre Pooling sayısını ayarlamalıyız.Ayarlamadık diyelim en ve en önemlisi açtığımız tüm bağlantıları işleri bittiği zaman kapatmalıyız.
Open() ve Close() olaylarını biliyoruz üstünde durmuycam arkadaşlar.Birde Dispose() olayı var tam olarak kurtulmak istiyorsak tam olarak derkende Close()'dan birkaç adım öteye gider .Bağlantının durum bilgisini ve bağlantının bazı özelliklerinide temizler.Şimdilik bilgim dahilinde olan kısım bu kadar arkadaşlar.
Makalem umarım yardımcı olmuştur.Beni Takip etmeye devam edin !
Using(SqlConnection cnn= new SqlConnection())
YanıtlaSil{
// cnn : bu bloktan çıkınca dispose olacağım.
}
IDisposable interface inden türediği için Using bloğunu kullanabiliriz.
Yanıt için teşekkürler :) ama hatalara çözüm bulmak makaledeki amaç ve poolinge değinmek :)
Sil