Timeout Expired hatası ve çözümü

Yazılım uygulamaları yaparken birçok hata ile karşılamaktayız. Hatalar yazılımında ustalaşmanın vazgeçilmez unsurlarındandır. Bazen çok öğretici oldukları kadar bazende içinden çıkılmaz bir hal alırlar. Bugün benimde başımı ağrıtmış bir hata olan TİMEOUT EXPİRED hatasını göreceğiz.

Asp.Net uygulamalarınızda "Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached." hatası alıyorsak açtığımız nesneler ve bağlantılar vardır. Ve En önemlisi ve çözümü biz bunları kapatmayı unutmuşuz veya gözden kaçırmışızdır.
Bu nesneleri veya bağlantıları kapatırsak bu hatadan kurtulabiliriz.

Peki bu bağlantı ve nesneler nelerdir. SqlConnection, SqlDataReader, SqlDataAdapter, SqlCommand nesneleridir. Yani veritabanı işlemlerinde kullandığımız sınıflardan türetilen nesnelerle işimiz bittiğinde onları Close() metodu ile kapamalı veya Dispose() metodu ile bellekten silmeliyiz. Yoksa birçok nesne ve bağlantı içince bu hatayı alabiliriz.

Açılan bağlantıların kapatılacağına dair kodlar bulunmaktadır.


//Nesnelerin tanımlanması ve bağlantıların açılması
SqlConnection conn = new SqlConnection("bağlantı cümleciği");
conn.Open();

SqlCommand cmd = new SqlCommand("sorgu",conn);

SqlDataAdapter adapter = new SqlDataAdapter("sorgu",conn);

SqlDataReader dr = new SqlDataReader();


//Açılan nesnelerin ve bağlantıların kapatılmaları


dr.Close();

cmd.Dispose();

adapter.Dispose();

conn.Close();

Yukarıda gördüğümüz gibi tüm proje içinde açılan bağlantıların, kendi etki (kullanıldıkları) alanlarında kullanımı bittikten sonra kapatılmaları gerekiyor. Aksi takdirde yine aynı hatayla karşılaşmak mümkün hale gelmektedir.

Herkese iyi çalışmalar.

Bilginin büyüğü küçüğü olmaz ;)

Yorumlar