SORU
15 Mayıs 2009, Cuma


Neden hiçbir Başvuru Çöp Toplama Sayma C#?

C bir arka plan geldiğim ve C# için bir yıl çalıştım. Diğerleri gibi neden deterministik kaynak yönetimi yerleşik bir dil değildir için beni şaşırttılar. Deterministik yıkıcılar yerine desen atma var. Onların kodu ile IDisposable kanser yaymak ister People start to wonder zahmete değer.

Benim C -önyargılı beyin göründüğü gibi kullanarak referans sayılan akıllı işaretçiler ile deterministik yıkıcılar önemli bir adım kadar bir çöp toplayıcı gerektirir size uygulamak IDisposable ve çağrı atmanız temiz olmayan bellek kaynakları. Kuşkusuz, çok zeki değilim... en iyisi böyle olduğunu anlamak için bir arzu sadece bunu soruyorum.

Eğer C# gibi değiştirildi:

Nesneleri referans sayılır. Bir nesnenin başvuru sayısı sıfır olduğunda, kaynak temizleme yöntemi nesne üzerinde kararlı denir, sonra nesneyi çöp toplama işlemi için işaretlenir. Çöp toplama hangi noktada bellek iadesi gelecekte belirli olmayan bir zamanda oluşur. Bu senaryoda IDisposable uygulayan veya Atma aramak için hatırlamak zorunda değilsiniz. Sadece eğer serbest bırakmak için bellek olmayan kaynaklar varsa kaynak temizleme işlevi uygulamak.

  • Neden bu kötü bir fikir mi?
  • Bu çöp toplayıcı amacı yenilgi olacaktır?
  • Böyle bir şeyi uygulamak mümkün olur mu?

EDİT: Yorum şimdiye kadar, bu kötü bir fikir çünkü

  1. GC başvuru sayma olmadan daha hızlı
  2. nesne grafiğinde döngüsü ile ilgili sorun

Numara geçerli olduğunu düşünüyorum, ama iki numara kolay zayıf başvuruları kullanma ile başa çıkmak için.

Yani hız optimizasyonu o eksileri:

  1. zamanında olmayan bellek kaynak değil, özgür olabilir
  2. non-memory ücretsiz bir kaynak çok erken olabilir

Eğer kaynak temizleme mekanizması deterministik ve dahili dili ise bu olasılıkları ortadan kaldırabilir.

CEVAP
26 Mayıs 2009, Salı


Brad Abrams an e-mail from Brian Harry gelişimi sırasında yazılı olarak gönderildi .Net çerçeve. Başvuru sayma kullanan VB6 ile başvuru sayımı erken önceliklerinden biri anlamsal eşdeğerlik tutmak için bile kullanılmamıştır nedenleri pek çok ayrıntı. Bazı türleri ref sayılmış olması ve diğerleri gibi olanakları (0**!), içine görünüyor ya da belirli durumlarda hakem olan bu çözümlerin hiçbiri kabul edilebilir kabul edildi neden sayılır.

[Kaynak sorunu nedeniyle yönetim ve deterministik sonuçlandırılması] bu tür bir. denemek için gidiyorum hassas bir konu gibi hassas ve benim tam elimden geldiğince açıklama. Benim için özür dile posta uzunluğu. İlk 90% bu mail sizi ikna etmeye çalışıyor. sorun gerçekten zor. İçinde son bölüm, şeyler hakkında konuşuruz ama ihtiyacınız yapmak için çalışıyoruz biz neden anlamak için ilk bölümü bu seçenekler arıyor.

...

Biz başlangıçta ile başladı varsayım buçözüm olur otomatik ilan no şeklinde sayma(yani programcı olamaz başka şeyler için artı unut) algılamak ve işlemek döngüleri otomatik olarak. ...bizsonuçta sonucuna bu işe yaramayacaktı genel durum.

...

Özet olarak:

  • Çok önemli olduğunu düşünüyoruzdöngü sorunu çözmek programcılar için zorlamadan , takip ve tasarımını anlamak bu karmaşık veri yapısı sorunları.
  • Yüksek bir performansa sahip olduğumuzdan emin olmak istiyoruz (hem hız hem de çalışma kümesi) sistemi ve analizi kullanarak gösterirbaşvuru sayma sistemdeki her nesne için bize bunu başarmak için izin vermez hedef.
  • Kompozisyonu ve döküm de dahil olmak üzere çeşitli nedenlerle, için sorunları varbasit bir şeffaf çözüm sadece bu nesnelerin sahip bu ref sayılması lazım.
  • Sağlayan bir çözüm seçmek için seçtikdeterministik bir tek sonlandırılması için dil engeller çünkü bağlam/ birlikte çalışabilirlikdiğer diller ve sınıf kitaplıkları çatallanma olur belirli bir dil oluşturarak sürümleri.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007
  • LearnCode.academy

    LearnCode.ac

    20 Aralık 2012
  • WHZGUD2

    WHZGUD2

    21 EYLÜL 2011