SORU
25 NİSAN 2012, ÇARŞAMBA


Gereken "Atma" tek tip yönetilmeyen kaynakları içeren için kullanılır?

Bir meslektaşım son zamanlarda IDisposable uygulayan Dispose ve türleri değeri hakkında bir tartışma vardı.

En kısa sürede temizlemek gerekir, bu tür için IDisposable hayata bir değer olduğunu düşünüyorumeğer temizlemek için yönetilmeyen kaynakları ise yok bile.

Meslektaşım farklı; eğer herhangi bir yönetilmeyen kaynakları yok eğer doğru değilse IDisposable uygulama tipi sonunda çöp toplanacak gerekli olmadığını düşünüyor.

Benim iddiam Eğer en kısa sürede kapatmak istediğini ADO.NET bir bağlantı varsa, o zaman IDisposable using new MyThingWithAConnection() uygulama mantıklı olurdu. Benim meslektaşım, yorganın altında, ADO.NET bir bağlantı olduğu cevabını verdikaynak yönetilmeyen. Onun cevap benim cevap olduher şeyin nihayetinde yönetilmeyen bir kaynak.

Seni nereye recommended disposable pattern farkındayımücretsiz Dispose çağrılırsa kaynakları yönetilen ve yönetilmeyenamaücretsiz yönetilmeyen kaynakları olarak adlandırılan sonlandırıcı/yıkıcı üzerinden sadece(ve bir süre önce 23* *hakkında bir yazı yazdı)

Yani, benim soru, Eğer yönetilmeyen kaynakları içermeyen bir tür varsa, IDisposable uygulamaya değer mi?

CEVAP
25 NİSAN 2012, ÇARŞAMBA


IDisposable için geçerli olan farklı kullanım alanları da var. Basit bir örnek, belirli bir anda, artık ihtiyacın yok en kısa sürede kapatılması gereken açık bir dosya tutuyor. Tabii ki, bir yöntem Close ama Dispose sahip using (var f = new MyFile(path)) { /*process it*/ } daha fazla olurdu gibi desen kullanarak özel durum-güvenli sağlayabilirsiniz.

Daha popüler bir örnek olarak imha etmek amacıyla genellikle kendi sağlamak zorunda olduğu anlamına gelir IDisposable bazı diğer kaynaklar, Dispose holding olurdu.

Genel olarak, bir şey deterministik imha olmasını istiyorsanız en kısa sürede, IDisposable uygulamak gerekir.

Bence sizinki arasında fark I IDisposable bazı kaynak ihtiyaçlarına en kısa sürede uygulamakdeterministikyıkım/gerekli değil azatmümkün olduğunca çabuk. Çöp toplama güvenerek zaman beklenmedik anda oluyor, ve aslında hiç olmayabilir, çünkü bu durumda bir seçenek (meslektaşınız iddiasının aksine) değil!

Aslında herhangi bir kaynak olduğunu yönetilmeyen örtüsü altında gerçekten bir şey ifade etmiyor: geliştirici gerektiğini düşünüyorum açısından "ne zaman ve nasıl doğru elden bu nesne" yerine "nasıl oluyor örtüsü altında". Temel uygulama zaman, her hangi bir değişiklik olabilir.

Aslında, C arasındaki temel farklardan biri# ve C varsayılan deterministik yıkım olmamasıdır. IDisposable gelir açığı kapat: sipariş deterministik imha (ancak sağlamak-müşteriler arıyorum; aynı şekilde C edemiyor olduğundan emin olun, müşteriler arar delete nesne).


Aslında arasındaki fark nedir . küçük bir ek: ^em>deterministikkaynakları boşaltmak ve onları özgür bırakmakmümkün olduğunca çabuk? Aslında, bu tamamen farklı ortogonal olmasa da fikirleri vardır.

Kaynakları ise serbestkararlıbu istemci kodunu söyleyecek bir olasılık olması gerektiği anlamına gelir "Şimdi, bu kaynağı serbest istiyorum". Bu gerçekten değil olabilirmümkün olduğunca erkenkaynak serbest zaman anı: Nesne kaynak, ihtiyacı olan her şey var olabilir, potansiyel kaynak zaten. bedava diye holding Öte yandan, itiraz edebilir seçmek için (genellikle yönetilmeyen) kaynak sonra bile nesnenin Dispose ran ile temizlemek sadece sonlandırıcı (eğer elinde kaynak için çok uzun zaman yapmaz herhangi bir sorun).

Yani, kaynak boşaltmak içinmümkün olduğunca çabukkonuşma kesinlikle, Dispose gerekli değildir: Nesne kaynak, artık ihtiyaç olmadığını kendisi bunun farkında değilmiş gibi. en kısa sürede boşaltabilir Dispose nesne ancak yararlı bir ipucu olarak hizmet vermektedirkendisiartık gerekli değildir, kaynakları belki deolabiliruygunsa bu noktada serbest.


Daha gerekli bir ekleme: sadece deterministik kaldırma gereken kaynakları yönetilmeyen! Bu soruya verilen yanıtlar arasında görüş farkı önemli noktalarından biri gibi görünüyor. Kararlı serbest gerekebilir tamamen yaratıcı yapısı var.

Örnekler: bir hakkı bazı paylaşılan yapısı (sanırım RW-lock), büyük bir yığın bellek (hayal sen yönetmek Bazı program hafızasına el ile), bir lisans için kullanan başka bir program (hayal İzin Verilmiyor çalıştırmak daha fazlaXbazı program aynı anda kopya), vb. Burada serbest bir nesne yönetilmeyen bir kaynak, ama değildoğruyapmak/tamamen içsel bir şey, kullanmak için programı mantığınıza oluşturmak.


Küçük ayrıca: [ab]IDisposablekullanarak düzgün örnekler küçük bir listesi burada: 25**.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • Max Lee

    Max Lee

    18 AĞUSTOS 2006
  • michal lelkowski

    michal lelko

    9 Temmuz 2006