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. Çöp toplayıcı yönetilmeyen bir kaynağı kapsülleyen bir nesnenin kullanım ömrünü izleyebilir olsa da, yönetilmeyen kaynağı nasıl serbest bırakacağını ve temizleyeceğini bilmez.

Türleriniz yönetilmeyen kaynaklar ise, aşağıdakileri yapmanız gerekir:

  • 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. Nesneye (ve kullandığı kaynaklara) artık ihtiyaç duyulmadığında, sizin türündeki bir tüketici çağırır Dispose . 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 yapmak için iki yol vardır:

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

      veya

    • Sonlandırıcı tanımlayın. Sonlandırma, bir türün tüketicisi bunları belirleyici bir şekilde atmak için çağıramayınca IDisposable.Dispose yönetilmeyen kaynakların belirlenemeyen şekilde serbest bırakılmasına olanak tanır.

      Uyarı

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

Sizin türündeki tüketiciler, yönetilmeyen kaynaklar tarafından kullanılan belleği boşaltmak için uygulamanızı doğrudan çağırabilir IDisposable.Dispose . Bir yöntemi düzgün bir Dispose şekilde uyguladığınızda, güvenli tanıtıcınızın Finalize yöntemi veya yöntemi kendi geçersiz kılmanız Object.Finalize , yöntemin çağrılmaması durumunda Dispose kaynakları temizlemek için bir koruma haline gelir.

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 nesneleri kullanmak IDisposable , bir türün tüketicilerinin kendi 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.

Başvuru

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