Aracılığıyla paylaş


Yönetilmeyen kaynakları temizleme

Uygulamanızın oluşturduğu nesnelerin çoğu için bellek yönetimini işlemek için .NET çöp toplayıcısına güvenebilirsiniz. Ancak yönetilmeyen kaynaklar içeren nesneler oluşturduğunuzda, bu kaynakları kullanmayı bitirdiğinizde açıkça serbest bırakmanız gerekir . Yönetilmeyen kaynakların en yaygın türleri; dosyalar, pencereler, ağ bağlantıları veya veritabanı bağlantıları gibi işletim sistemi kaynaklarını sarmalayan nesnelerdir. Atık toplayıcı yönetilmeyen bir kaynağı kapsülleyen bir nesnenin ömrünü izleyebilse de, yönetilmeyen kaynağı serbest bırakma ve temizlemeyi bilmez.

Türleriniz yönetilmeyen kaynaklar kullanıyorsa aşağıdakileri yapmalısınız:

  • Dispose desenini uygulayın. Bu, yönetilmeyen kaynakların belirleyici sürümünü etkinleştirmek için bir IDisposable.Dispose uygulama sağlamanızı gerektirir. Sizin türünüzdeki bir tüketici, nesneye (ve kullandığı kaynaklara) artık ihtiyaç duyulmadığında Dispose'yı çağırır. Dispose yöntemi yönetilmeyen kaynakları hemen serbest bırakır.

  • Sizin türündeki bir tüketicinin çağrıyı Disposeunutması durumunda, yönetilmeyen kaynaklarınızın serbest bırakılması için bir yol sağlayın. Bunu yapmanın iki yolu vardır:

    • Yönetilmeyen kaynağınızı sarmak için güvenli bir tutacak kullanın. Önerilen teknik budur. Güvenli tutamaklar System.Runtime.InteropServices.SafeHandle soyut sınıftan türetilir ve sağlam bir Finalize yöntem içerir. Güvenli bir tanıtıcı kullandığınızda, IDisposable arabirimini uygulayıp Dispose uygulamanızda güvenli tanıtıcınızın IDisposable.Dispose yöntemini çağırmanız yeterlidir. Güvenli tanıtıcının Dispose yöntemi çağrılmazsa, sonlandırıcısı çöp toplayıcı tarafından otomatik olarak çağrılır.

      veya

    • Sonlandırıcı tanımlayın. Sonlandırma, bir türün tüketicisi IDisposable.Dispose'yi çağırmadığında, yönetilmeyen kaynakların kesin olmayan bir şekilde serbest bırakılmasına olanak tanır.

      Uyarı

      Nesne sonlandırma karmaşık ve hataya açık bir işlem olabilir; bu nedenle, kendi sonlandırıcınızı sağlamak yerine güvenli bir tanıtıcı kullanmanızı öneririz.

Sizin türünüzdeki kullanıcılar, yönetimsiz kaynaklar tarafından kullanılan belleği boşaltmak için IDisposable.Dispose uygulamanızı doğrudan çağırabilir. Bir Dispose yöntemini doğru bir şekilde uyguladığınızda, ya güvenli tanıtıcınızın Finalize yöntemi ya da Object.Finalize yöntemini kendi geçersiz kılmanız, Dispose yönteminin çağrılmaması durumunda kaynakları temizlemek için bir koruma görevi görür.

Bu bölümde

Dispose yönteminin uygulanması , yönetilmeyen kaynakları serbest bırakmak için dispose düzeninin nasıl uygulanacağını açıklar.

Uygulayan IDisposablenesneleri kullanma bir türün tüketicilerinin, uygulamasının çağrılmasını nasıl sağladığını Dispose açıklar. Bunu yapmak için C# using (veya Visual Basic Using) deyimini kullanmanızı kesinlikle öneririz.

Kaynak

Tür / Üye Açıklama
System.IDisposable Dispose Yönetilmeyen kaynakları serbest bırakma yöntemini tanımlar.
Object.Finalize Dispose yöntemi tarafından yönetilmeyen kaynaklar serbest bırakılmadığında nesne sonlandırması sağlar.
GC.SuppressFinalize Sonlandırmayı bastırır. Bu yöntem, sonlandırıcının çalıştırılmasını önlemek için genellikle bir Dispose yönteminden çağrılır.