C# Dispose Kavramı Nedir Ne İşe Yarar?

Turan
2 Temmuz 2015 Perşembe
3

Dispose metodunu hep kullanırım yanlız ne olduğunu bilmeden kullanırdım, bazen hata verir program ama nedense ne olduğunu hala öğrenme gereği duymazdım... İnternetten bi kaç araştırma yaparak aşagıdaki söylemlere dahil oldum ve açıklaması sanırım böyle bişey olsa gerek.

  • Bir nesne örnekleyip referans verdiğinizde, yani örneğin; Dim baglanti As New sqlconnection(baglanti_stringi) dediğinizde bir nesne örneklemiş ve ona referans vermiş oluyorsunuz... Zaten sqlconnection'un Close() metodu var,bu metot bağlantıyı kapatır. Dispose() metodunun farkı şudur; bu metot örneklediğiniz ve referans gösterdiğiniz nesneyi bellekten atar... Bellekten atmak ile kapatmak farklı şeylerdir,dikkatinizi çekerim... Bir nesneyi kapatsanız dahi o,bellekte kalır...Bellekten atılan bir şey ise ne kapatılabilir,ne de açılabilir...sqlconnection üzerinde Dispose()yaptıktan sonra open() veya close() metotlarından herhangi birini çağırırsanız program kırılacaktır...
  • Normalde GAC (Garbage Collector) belirli aralıklarla bellekten artık hiçbiryere referansı olmayan nesneleri bulup onları yok eder (dispose). Sen dersen ki bu objeyle işim bitti ve GAC i beklemeye gerek yok. Onu hemen çağırarak yok etmeni sağlar. Ancak burada nesneye referans veren herhangi başka bir nesnen var mı dikkat etmelisin yoksa hata verir.
  • Fonksiyonlar dispose edilemezler. Dispose işlemi class tipi nesnelere uygulanabilir. Bunun nedeni Heap de yaratılıyor olmaları ve bellekte yer tutmalarıdır. Fonksiyonlar ise işlemciyi ve belleği sadece çalıştıkları sürece meşgul ederler. Fonksiyonlardan çıkıldığında içlerinde tanımlanmış local değişkenler zaten dispose olur ve bellekten temizlenir.

yorum açıklamalarında böyle diyorlar, zaten pek türkçe kaynak yok yanlız konuşmalar mantıklı... kendinize göre değerlendirebilirsiniz....



yorumlar
64x64

emre

22 Nisan 2020 Çarşamba

teşekkür ederim Hocam.

64x64

Görkem

6 Ağustos 2020 Perşembe

teşekkür ediyorum

64x64

Tolga

5 Haziran 2021 Cumartesi

Bilip bilmeden yazıyorsunuz. Dispose edildikten sonra Open da Close da çağrılabilir. Sadece connection string sıfırlandığı için ondan dolayı hata verir. Onu da Open'ta yapar ama Close çalışır hata vermeden.

Yorum yaz