Visual Basic .NET'te çöp toplama (Garbage Collection, GC), kullanılmayan nesneleri serbest bırakmaya yarayan otomatik bir bellek yönetim sürecidir ve bellek sızıntılarını önler. Nesneler oluşturulduğunda, yönetilen bir yığında bellek tahsis edilir ve nesneye referans kalmadığında, zamanla çöp toplayıcı, ocupado kaynakları serbest bırakır.
Özellikler:
Finalize yöntemini uygulayabilir, ancak daha güvenilir olanı IDisposable arayüzünü ve Dispose yöntemini kullanmaktır.Dispose yönteminin otomatik çağrılması için Using yapısını kullanın.Dispose kullanarak bir kod örneği:
Public Class FileManager Implements IDisposable Private disposed As Boolean = False ' ... yönetilmeyen kaynak Public Sub Dispose() Implements IDisposable.Dispose If Not disposed Then ' Kaynakların temizlenmesi disposed = True End If GC.SuppressFinalize(Me) End Sub Protected Overrides Sub Finalize() Dispose() MyBase.Finalize() End Sub End Class
Program sona erdiğinde nesnenin sonlandırıcısının çağrılacağından emin olabilir miyiz?
Yanlış cevap: Evet, sonlandırıcı otomatik olarak çağrılır, nesne artık gerektiğinde.
Doğru cevap: Hayır, sonlandırıcının çağrılması herhangi bir güvenceye sahip değildir. Sonlandırıcılar yalnızca GC'nin onları işleyip işleyemediğine bağlı olarak çağrılır. Kaynakların güvenli bir şekilde serbest bırakılması için her zaman Dispose kullanın.
Örnek:
' Kaynağın güvenli bir şekilde serbest bırakılması için Using yapısının kullanımı Using mgr As New FileManager() ' Kaynak ile çalış End Using
Hikaye
Dosya işleme projesinde geçici dosyalar silinmiyordu, çünkü yalnızca sonlandırıcıya güveniliyordu. Büyük dosya hacimlerinde, manuelDisposeçağrısı yapılana kadar dosya sistemi doluyordu.
Hikaye
Bir geliştirici, her işlemden sonraGC.Collect()'i manuel olarak çağırıyordu — bu, çöp toplamanın sık olması nedeniyle uygulamanın performansını önemli ölçüde yavaşlattı.
Hikaye
Büyük web uygulamalarında, hizmetlerden biri Dispose desenini yanlış uyguladı veGC.SuppressFinalize()'i çağırmadı. Bu, nesnelerin çift temizlenmesine neden oldu ve beklenmedik çöküşler ile kaynak sızıntılarına yol açtı.