2010-02-03 12 views
7

CLR çöp toplama mekanizmasının, gözyaşı ve çöp toplama için kilitlenme oluşturmadan, nesne hiyerarşiğimde döngüsel başvurulardan kurtulmak anlamına geldiğine dair bir teorim var. Bu güvenli bir varsayım mı? (Hedef dil VB.NET)CLR çöp toplama metodolojisi, etrafında dairesel nesne referansları atmanın güvenli olduğu anlamına mı geliyor?

+0

çok iyi kabul edilen cevap benzer bir soru için buraya bakınız http://stackoverflow.com/questions/400706/circular-references -ause-memory-leak –

+0

@David: AZ, referans sayımı kullanamaz dedi. –

+0

@Johannes: Bu benim yorumumda bir yazım hatasıydı, (soruya değil) soruyu kastettim. İlk soru, CLR'de referans sayımının kullanımının güvensiz olup olmadığıydı. Soru (AZ'ın cevabı değil) CLR'nin GC'yi nasıl yaptığı konusunda yanlıştı. –

cevap

11

.NET çöp toplayıcısı, bir nesil işaretleyici ve toplayıcı toplayıcıdır. Referans sayımı kullanmaz. Evet, dairesel referanslara sahip olmak güvenli. Dil bu maddesine göre

+1

Sadece bir referansı bir statik geçirmekten kaçınmaya dikkat edin ve aynı zamanda delegelerin uygulandıkları nesneye referans olarak sayılacağını da unutmayın. Statik olay işleyici listesi gibi şeyleri canlı tutmak çok kolay. – morechilli

3

önemli değildir: https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-5109829.html

Dairesel referans her diğer bakınız İki nesne olması oluşan bir problemdir. Diyelim ki A Sınıfı var demektir, Sınıf B'ye atıfta bulunur. B Sınıfı da Sınıf A'ya atıfta bulunuyorsa, o zaman dairesel referansımız vardır. Bu, birçok durumda olur. için tipik bir örnek, bu, alt nesnesiyle etkileşimde bulunduğu ve ana üst nesnesinin bir başvurusu bulunduğu, nesneler arasında ana-alt ilişkidir. Bu, numaralı nesnelerin, uygulamanın kapatıldığı temizlenene kadar temizlenmemesine yol açabilir. NET çöp toplama yolu, döngüsel başvuru sorununu çözüyor, çünkü çöp toplayıcısı, , root'dan erişilebilen nesnesini temizler. http://blogs.msdn.com/abhinaba/archive/2009/01/27/back-to-basics-reference-counting-garbage-collection.aspx o .NET çöp toplama çöp toplama referans sayma dayalı değil gibi görünüyor:

DÜZENLEME: bu yazı bakılırsa
.

okunmaya değer bir diğer makale (ayrıntılı olarak Çöp toplama açıklıyor) bu biridir: http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/

+2

"Kökten erişilemiyor" –

İlgili konular