SORU
19 Ocak 2009, PAZARTESİ


Vs IDisposable yıkıcı?

C/nesneleri IDisposable arayüzü ve yıkıcı atılması okudum# ama benim için aynı şeyi yapmak gibi görünüyor?

İkisi arasındaki fark nedir? Neden diğer üzerinden bir kullanmalıyım? Bu örnekte aslında, aşağıda (bağlantı) bu kod hem IDisposable arayüzü ve yıkıcı kullanır:

http://msdn.microsoft.com/en-us/library/system.idisposable.aspx

Yorum yıkıcı olursa sonuçlandırılması kodu kullanılırsa değil, ama nasıl bir kullanmaya ne zaman karar verebilirim? diyor

CEVAP
19 Ocak 2009, PAZARTESİ


Sonlandırıcı, IDisposable açıklamak için yardımcı olacaktır, ve ne zaman kullanmalısınız derinlemesine bir oldukça yazı yazdım: http://gregbee.ch/blog/implementing-and-using-the-idisposable-interface

Belki de en önemli kısmı, aşağıda alıntı

Yönetilmeyen kaynakları kullanırken kolları gibi ve veritabanı bağlantıları, emin olmalısınız minimum tutar için tutuluyorlar. zaman, ilkesini kullanarak geç almak ve erken tahliye. C kaynakları serbest bırakmak için genellikle. yıkıcı olarak hazırlanmış olan. kararlı noktasında çalıştırın nesne silinir. .NET çalışma zamanı, ancak, bir çöp kullanır toplayıcı (GC) temizleyip geri kazanmak için bellek hiçbir nesne tarafından kullanılan bu bir çalışan olarak daha ulaşılabilir; nokta anlamına gelir periyodik olarak hangi nesne temizlenir. belirleyici olmayan. Sonucu bu yıkıcılar yok. yok gibi nesneleri yönetilen için onları çalıştırmak için yer belirleyici.

Yıkıcı yerine, C# vardır uygulanmakta olan sonlandırıcı geçersiz kılma Finalize yöntemi tanımlanmamış temel Nesne sınıfı (gerçi C# biraz karışıklığa yol açacak C kullanır yıkıcı sözdizimi bunun için Nesne)~. Eğer bir nesnenin Finalize geçersiz kılar yöntem olmaktan ziyade dışarı çıktığında GC tarafından toplanan kapsam, GC bir sonlandırıcı üzerine yerleştirir sıra. Bir sonraki GC döngü içinde sıraya sonlandırıcı (bir çalıştırın mevcut tek iş parçacığı uygulama) ve hafızasından kesinleşmiş nesneleri geri. Bu oldukça açık değilsin neden bu temiz bir sonlandırıcı yapmak istiyorum: iki GC döngüleri toplamak için alır nesne yerine bir ve tüm sonlandırıcı nerede iplik tek her diğer konu ise çalıştırılır canını acıtacak kadar askıya alındı, performans.

Eğer yıkıcılar yok ise, ve temizliği bırakmak istemezsin sonlandırıcı, o zaman tek seçenek. manuel, kararlı, temiz Yukarı nesne. Bu IDisposable girin hangi arayüzü bir standart sağlar bu işlevi destekleyen ve tek bir yöntem, İmha,tanımlar nerede senin için temizleme mantığı koymak nesne. Ne zaman nihayet içinde kullanılan block, bu arabirim sağlar eşdeğer işlevsellik yıkıcılar. Sebebi nihayet kod blokları desteklemek için öncelikle IDisposable arabirimi; bu yüzden C var sadece/dışında kullanır sonunda bir blok ile yıkıcılar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Le

    Anthony Le

    10 EKİM 2006
  • habpsu

    habpsu

    25 Temmuz 2007
  • Jay Will

    Jay Will

    19 NİSAN 2006