Yönetilmeyen kaynakları Temizleme

Uygulamanızın oluşturduğu nesnelerin çoğu için, bellek yönetimini işlemek üzere .NET çöp toplayıcısına güvenebilirsiniz. Ancak, yönetilmeyen kaynakları içeren nesneler oluşturduğunuzda, bunları kullanmayı bitirdiğinizde bu kaynakları açıkça serbest bırakmanız gerekir. Yönetilmeyen kaynakların en yaygın türleri, dosyalar, Windows, ağ bağlantıları veya veritabanı bağlantıları gibi işletim sistemi kaynaklarını çevreeden 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 modeliniuygulayın. Bu IDisposable.Dispose , yönetilmeyen kaynakların belirleyici sürümünü etkinleştirmek için bir uygulama sağlamanızı gerektirir. DisposeNesne (ve kullandığı kaynaklar) artık gerekli olmadığında, bir tür tüketicisini çağırır. DisposeYöntemi, yönetilmeyen kaynakları hemen serbest bırakır.

  • Bir tür tüketicisinin çağırmak için unutması durumunda Dispose , 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 tutamaçları System.Runtime.InteropServices.SafeHandle soyut sınıftan türetilir ve güçlü bir Finalize yöntem içerir. Güvenli bir tanıtıcı kullandığınızda, yalnızca IDisposable arabirimini uygular ve uygulamanızda güvenli işleyiciniz Dispose yöntemini çağırın IDisposable.Dispose . Güvenli tanıtıcının sonlandırıcısı, yöntemi çağrılmadıysanız çö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 belirleyici olarak atıldığında yönetilmeyen kaynakların belirleyici olmayan serbest olmasına olanak sağlar IDisposable.Dispose .

      Uyarı

      Ancak, nesne sonlandırma karmaşık ve hataya açık bir işlem olabileceğinden, kendi sonlandırıcısını sağlamak yerine güvenli bir tanıtıcı kullanmanızı öneririz.

Daha sonra, bu tür tüketicileri, IDisposable.Dispose yönetilmeyen kaynaklar tarafından kullanılan belleği açmak için doğrudan uygulamanızı çağırabilir. Bir yöntemi düzgün bir şekilde uyguladığınızda Dispose , güvenli tanıtıcının Finalize yöntemi veya kendi yöntemin geçersiz kılınması, Object.Finalize Dispose yöntemin çağrılmaması durumunda kaynakları temizlemek için bir güvenlik önlemi haline gelir.

Bu bölümde

Dispose yöntemi uygulamak , yönetilmeyen kaynakları serbest bırakmak için Dispose deseninin nasıl uygulanacağını açıklar.

Uygulayan IDisposable nesneleri kullanma bir türün tüketicilerinin uygulamanın çağrılması için nasıl emin olduğunu açıklar Dispose . usingbunu yapmak için C# (veya Visual Basic Using ) ifadesinin kullanılmasını öneririz.

Başvuru

Tür/üye Description
System.IDisposable DisposeYönetilmeyen kaynakları serbest bırakma yöntemini tanımlar.
Object.Finalize Yönetilmeyen kaynaklar yöntemi tarafından yayımlanamadığında nesne sonlandırması sağlar Dispose .
GC.SuppressFinalize Sonlandırmayı bastırır. Bu yöntem, Dispose sonlandırıcının yürütülmesini engellemek için bir yöntemden geleneksel çağırılır.