ProgramlamaVB.NET Geliştirici

Visual Basic .NET'te çöp toplama (Garbage Collection) nedir, nesnelerin sonlandırılması nasıl çalışır ve bellek yönetiminde nelere dikkat edilmelidir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

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:

  • GC'yi manuel olarak çağırmak genellikle önerilmez, kontrolü .NET ortamına bırakmalısınız.
  • Sınıflar, yönetilmeyen kaynakları temizlemek için 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.
  • Sonlandırıcılar, referans kaybedildiğinde hemen değil, GC gerektiğini düşündüğünde çalışır.

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

Kandırmaca Soru

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

Konuyla ilgili bilgi eksikliğinden kaynaklanan gerçek hata örnekleri


Hikaye
Dosya işleme projesinde geçici dosyalar silinmiyordu, çünkü yalnızca sonlandırıcıya güveniliyordu. Büyük dosya hacimlerinde, manuel Dispose çağrısı yapılana kadar dosya sistemi doluyordu.


Hikaye
Bir geliştirici, her işlemden sonra GC.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ı ve GC.SuppressFinalize()'i çağırmadı. Bu, nesnelerin çift temizlenmesine neden oldu ve beklenmedik çöküşler ile kaynak sızıntılarına yol açtı.