Programlama dillerinde, bir nesne sadece varlığı sırasında değişken olabilir, örneklemeden sonra değiştirilemez. Bu nedenle aynı bellek hücresi yeni değerlere tahsis edilemez, bu nedenle kullanılmayan alanları yönetmek için bir tür otomatik bellek yönetimi gerekir. Bu kullanılmayan alanlara çöp denir ve etkin bellek yönetimi sürecinin tamamına çöp toplama denir.
Bir çöp toplayıcının temel amacı, ölü nesneleri canlı nesnelerden ayırmak ve yeniden kullanım için alanı geri kazanmaktır. Temel olarak, her şey bir bellek bloğundan başka bir şey olmayan yönetilen yığın üzerinde çalışır ve çöp toplayıcı, düzenli olarak yeni nesnelere bellek ayırmak için yığın belleğini kontrol eder. Dosyalar ve veritabanı bağlantıları gibi yönetilmeyen kaynakları serbest bırakmanın iki yöntemi vardır: İmha Et ve Sonlandır.
Bu makale, ikisi arasındaki farkı anlamanıza yardımcı olur.
Dispose, kullanıcıların nesnelere kaynaklarını serbest bırakmalarını söylemeleri ve nesnelere tekrar erişmeyi denememeleri için standart bir yoldur. Dispose yöntemi, nesneleri kullanılamaz hale getirerek açık bellek temizliğinin kontrolünü sağlar.
Kullanıcılar Dispose () yöntemini çağırdığında, nesnenin tüm pahalı kaynaklarını serbest bırakması ve böylece yeniden kullanılabilmesi beklenir. Asla çöp toplayıcı tarafından çağrılmaz, ancak yönetilen bellek kıt hale geldiğinde oynamaya başlar. Dispose () öğesinin nerede ve nasıl uygulanacağına karar vermek için “IDisposable” adlı özel bir arabirim kullanılır. Ancak dispose yöntemi çağrılmadığında ne olur??
Dispose yöntemi çağrılmazsa, yedek plan temizlik için Finalize () yöntemini kullanmaktır. Çöp toplayıcı tarafından belleği serbest bırakmadan önce son bir kaynak temizlemesi yapmaya çağırılır. Zamanında temizleme kavramı burada uygulanamaz hale gelir çünkü hafızayı derhal ayırmak yerine, nesne sonlandırma kuyruğuna sadece daha sonra yok edilecek şekilde eklenir. Sonlandırma daha çok bir programlama hatası durumunda uygulanan bir korumaya benzer ve yok etme kaynakları temizlemez, bu durumda çöp toplayıcı tarafından erişilemeyen nesneleri hangi sırayla kaldırırsa çıkarmak için Finalize () yöntemi çağrılır.
Dispose yöntemi, veritabanı tanıtıcıları, dosya tanıtıcıları, semaforlar ve işletim sistemi tarafından ayrılan diğer nesneler gibi yönetilmeyen kaynakların serbest bırakılmasını hızlandırmak için çağrılır. Dispose yöntemi, kullanılmayan belleği temizlemek ve GDI tanıtıcıları gibi kıt kaynakları temizlemek için gerekli kodu yürütmek üzere çağrılır. Basit bir ifadeyle, dispose yöntemi açık bellek temizliğinin kontrolünü sağlar. Sonlandırma yöntemi ise, bir nesne üzerinde çöp toplanmadan önce son temizleme işlemini gerçekleştirmek için kullanılan çöp toplama işleminin bir parçasıdır. Basitçe söylemek gerekirse, sonlandırma yöntemi, bir nesnenin yok edilmeden önce tutulan yönetilmeyen kaynakları serbest bırakmak için çağrılır.
Dispose yöntemi, kullanıcı kodu ve kaynakları eleme yöntemini uygulayan sınıf tarafından açıkça çağrılabilir. Ancak, çöp toplayıcı temizleme işlemini gerçekleştirene kadar bellek serbest bırakılamaz. Nesneye başka referanslar hala mevcut olsa bile yöntem çağrılabilir. Sonlandırma yöntemi, aksine, çöp toplayıcı tarafından ancak son bellek nesnesi örneğinin yok edildiğini ve nesneye daha fazla başvuru olmadığını belirledikten sonra çağrılabilir. Sonlandırma yöntemi yürütüldükten sonra, nesne yığın belleğinden kaldırılır.
Bir nesneyi bellekten atma işlemine, çöp toplayıcı yönetilmeyen kaynakları geri alamadığı için yönetilmeyen kaynaklara erişen nesneler için kullanılabilen yok etme deseni denir. Yönetilmeyen kaynakların serbest bırakılmasını isteyen ek bir Dispose (Boolean) yöntemi ile birlikte “IDisposable” arabirimi uygulanır. Bir nesne örneği, yeniden yerleştirilmesinden önce yok edildiğinde bir sonlandırma yöntemi yürütülür. Çöp toplayıcının takdirine bağlı olarak ortaya çıkan ve hatta gerçekleşmeyebilecek belirleyici olmayan bir yöntemdir. Aşırı gerekli olana kadar yönetilen nesneler üzerinde uygulanmamalıdır..
Nesnelerin anında elden çıkarılması için sonlandırma yerine bir atma yöntemi kullanmak çok daha hızlıdır. Yıkıcılar otomatik olarak çalışma zamanında sonlandırma yöntemine dönüştürülür. Nesne kapsam dışına çıktığında çöp toplayıcı tarafından otomatik olarak çağrılır ve bu genellikle nesnenin örneği yok edildiğinde gerçekleşir. Sonlandırma yöntemindeki sorun, artık çöp toplama yoluyla başvurulmayan belleği ne zaman geri alacağının belirleyici olmadığı anlamına gelmesidir. Ancak, bellekte hemen yer açmayabilir; aslında, asla çağrılmayabilir ve açıkça zorlanamaz.
Dispose ve finalize yöntemleri arasındaki temel fark, birincisinin artık kullanılmadıklarında nesneleri anında elden çıkaran deterministik bir yöntem olması, ikincisinin ise yönetilmeyen kaynakların tahsisi için belirleyici olmayan bir yöntem olması, yani serbest bırakmak için bir geri döndürme yöntemi olmasıdır. ayrılmadan önce kapsam dışına çıktıklarında bellek nesnesi örnekleri. Son derece gerekli olmadıkça elden çıkarma yönteminin sonlandırma üzerine kullanılması her zaman tavsiye edilir.
Diğer bir deyişle, sonlandırma, bazı programlama hataları durumunda imha yöntemi çağrılamadığında yönetilmeyen kaynakları temizlemek için uygulanan bir korumadır. Sonlandırma yöntemi, bir nesne yığın belleğinden atılacaksa çöp toplayıcı tarafından çağrılır..