Ne zaman GC kullanmalıyım.() SuppressFinalize? | Netgez.com
SORU
29 EYLÃœL 2008, PAZARTESÄ°


Ne zaman GC kullanmalıyım.() SuppressFinalize?

.NET, hangi şartlar altında GC.SuppressFinalize() kullanmalıyım?

Ne avantajı(ler) bu yöntemi kullanarak mı bana?

CEVAP
29 EYLÃœL 2008, PAZARTESÄ°


SuppressFinalize yalnızca bir sonlandırıcı olan bir sınıf tarafından çağrılmalıdır. this nesne tamamen temizlendi Çöp Toplayıcı (GC) bilgilendirilmesi.

Bir sonlandırıcı varsa tavsiye IDisposable desen

public class MyClass : IDisposable
{
    private bool disposed = false;

    protected virtual void Dispose(bool disposing)
    {
        if (!disposed)
        {
            if (disposing)
            {
                // called via myClass.Dispose(). 
                // OK to use any private object references
            }

            disposed = true;
        }
    }

    public void Dispose() // Implement IDisposable
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    ~MyClass() // the finalizer
    {
        Dispose(false);
    }
}

Normalde, CLR oluşturulurken bir sonlandırıcı ile nesneleri (oluşturmak için daha pahalı hale) sekmeleri tutar. SuppressFinalize nesne düzgün temizlendi GC söyler ve sonlandırıcı sırası üzerine gitmesine gerek yok. C bir yıkıcı gibi görünüyor, ama böyle bir şey hareket etmez.

SuppressFinalize optimizasyonu nesneleri uzun zaman sonlandırıcı sırası bekleyen canlı gibi önemsiz değildir. Diğer nesneler üzerinde SuppressFinalize sakıncası aramak için cazip değil. Bu ciddi bir kusur olmasını bekliyor.

Tasarım ilkeleri bir sonlandırıcı eğer nesne IDisposable uygulayan da gerekli değil bizi bilgilendirmek ama eğer bir sonlandırıcı varsa IDisposable sınıf deterministik temizleme izin uygulamak gerekir.

Çoğu zaman uzakta kaynakları temizlemek için IDisposable ile almak gerekir. Sadece nesne yönetilmeyen kaynakları tutar bir sonlandırıcı gerekir ve bu kaynakları temizlediğini garanti gerekir.

Not: Bazen kodlayıcılar kod düzgün IDisposable nesne imha olduğunu test etmek için kendi IDisposable kendi sınıfları oluşturur hata ayıklama için bir sonlandırıcı katacak.

    public void Dispose() // Implement IDisposable
    {
        Dispose(true);
    #if DEBUG
        GC.SuppressFinalize(this);
    #endif
    }

    #if DEBUG
    ~MyClass() // the finalizer
    {
        Dispose(false);
    }
    #endif

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • ELPRESADOR

    ELPRESADOR

    21 HAZÄ°RAN 2008
  • incognitotraveler

    incognitotra

    27 Mayıs 2010