Dispose metodunu hep kullanirim yanliz ne oldugunu bilmeden kullanirdim, bazen hata verir program ama nedense ne oldugunu hala ögrenme geregi duymazdim... Internetten bi kaç arastirma yaparak asagidaki söylemlere dahil oldum ve açiklamasi sanirim böyle bisey olsa gerek.
- Bir nesne örnekleyip referans verdiginizde, yani örnegin; Dim baglanti As New sqlconnection(baglanti_stringi) dediginizde bir nesne örneklemis ve ona referans vermis oluyorsunuz... Zaten sqlconnection'un Close() metodu var,bu metot baglantiyi kapatir. Dispose() metodunun farki sudur; bu metot örneklediginiz ve referans gösterdiginiz nesneyi bellekten atar... Bellekten atmak ile kapatmak farkli seylerdir,dikkatinizi çekerim... Bir nesneyi kapatsaniz dahi o,bellekte kalir...Bellekten atilan bir sey ise ne kapatilabilir,ne de açilabilir...sqlconnection üzerinde Dispose() yaptiktan sonra open() veya close() metotlarindan herhangi birini çagirirsaniz program kirilacaktir...
- Normalde GAC (Garbage Collector) belirli araliklarla bellekten artik hiçbiryere referansi olmayan nesneleri bulup onlari yok eder (dispose). Sen dersen ki bu objeyle isim bitti ve GAC i beklemeye gerek yok. Onu hemen çagirarak yok etmeni saglar. Ancak burada nesneye referans veren herhangi baska bir nesnen var mi dikkat etmelisin yoksa hata verir.
-
Fonksiyonlar dispose edilemezler. Dispose islemi class tipi nesnelere uygulanabilir. Bunun nedeni Heap de yaratiliyor olmalari ve bellekte yer tutmalaridir. Fonksiyonlar ise islemciyi ve bellegi sadece çalistiklari sürece mesgul ederler. Fonksiyonlardan çikildiginda içlerinde tanimlanmis local degiskenler zaten dispose olur ve bellekten temizlenir.
-
Close yordami baglanti nesnesinin özelliklerini yok etmeyip sadece o anda veritabani baglantisini keser. Niketim bu yordam çalistirildiktan sonra hala baglanti nesnesinin tüm özelliklerine erisebilir ve gerektiginde open() yordami ile ayni nesne üzerinden baglanti yeniden kurulur. Dispose() yordami öncelikle Close() yordamini çagirarak açik olan baglantiyi keser; ardindan baglanti nesnesinin özelliklerini sifirlar. Bu yüzden eger daha sonraki satirda yeniden baglanti kurulacaksa baglanti nesnesinin ConnectionString özelliginin yeniden düzenlenmesi gerekir. Bununla birlikte baglanti nesnesi baglanti havuzu üzerinde canli kalir.
yorum açiklamalarinda böyle diyorlar, zaten pek türkçe kaynak yok yanliz konusmalar mantikli... kendinize göre degerlendirebilirsiniz....