Garbage Collector (Çöp Toplayıcı) Üzerine [2]

Garbage Collector (Çöp Toplayıcı) Üzerine (1) başlıklı yazıya devam ediyoruz.



Garbage Collector ile ilgili Tess Ferrandez'in MSDN'deki blog'unda bir quiz ve bu quiz'in cevapları var.

Bazıları biraz daha derine iniyor ama mesela ilk bakışta benim ilgimi çeken ve pratik olarak yararlı bulduğum bir tanesini buraya alıntılamak istiyorum.

12. Why is it important to close database connections and dispose of objects? Doesn't the GC take care of that for me?

I think pretty much all of you got this one:) To paraphrase Arnaud, "The finalizer will eventually be called, after the object has been made available for garbage collection. Knowing that there may be quite some time until an object gets GC'ed, and that many resources are limited, you call Dispose yourself as soon as you're over with an object. It doesn't get GC'd when you call Dispose, but it releases its resources."


Hızlıca bir çevirecek olursak;

Soru: İşimiz bittiğinde veritabanı bağlantılarını kapatmak ve ilgili nesneleri Dispose etmek neden önemlidir? GC bütün temizlik işini bizim yerimize zaten halletmiyor mu?

Cevap: İlgili nesne GC için uygun hale geldiğinde eninde sonunda GC tarafından temizlenecek. Ancak GC'nin bunu yapması için oldukça uzun bir zaman geçebilir. Veritabanı bağlantısı gibi kaynaklar sınırlı sayıda olduğunda Dispose çağrısı yaparak işimiz bittiğinde kaynakları elimizden çıkartmak gerekir. Şu da var ki Dispose çağrısı yaptığımızda GC tarafından hemen temizlik yapılmaz, sadece bize ayrılmış kaynaklar serbest bırakılır.


Sonuç olarak, IDisposable arabirimini destekleyen sınıflarda Dispose metoduyla temizlik yapmak --özellikle de veritabanı bağlantısı gibi nispeten daha sınırlı kaynaklar için-- iyi bir alışkanlık gibi görünüyor. Zaten çoğumuz veritabanı bağlantısı ile ilgili olarak Dispose'un otomatik çağrılmasını sağlayan using bloğunu kullanıyoruzdur.

 12.10.2009 16:46:30   Yazılım Geliştirme

 Yorumlar

Şöyle bir durum da söz konusu; kullandığımız kaynakları serbest bırakmak için dispose metodunu kullanmazsak yada null değer atamazsak ve gc nesneleri kullanmamızdan kısa bir süre sonraya devreye girerse, bu nesneler ile işimizin bittiğini anlayamayabilir ve nesneleri temizlemeyebilir. Bu nedenle en temizi, işi biten her nesneye uygun muameleyi yapmaktır. Herşeyi gc'e bırakmak bence çok doğru bir yaklaşım değil.

 Tolga Aykurt tarafından gönderildi. (e-posta)  21.12.2009 10:01:50


Bu yazı için yorumlar kilitlenmiştir.
 Kategoriler
 Bağlantılar
 Son Yorumlar
 istatistikler

10 kategoride 79 yazı, 91 yorum

IP adresiniz: 38.107.191.106
Etkin ziyaretçi sayısı: 16