是否有任何方式以廣義方式將對象實例(對象A)與第二個對象(對象B)關聯起來,以便在B收集時A成爲可收集的對象?如果B有一個指向A的實例變量,但沒有明確地改變B的類定義,並且能夠以動態的方式做到這一點,那麼會發生同樣的行爲?將對象與另一個對象關聯以進行GC清除
同一類的效果可以通過在一個時髦的方式使用Component.Disposed事件中完成,但我不希望使得B一次性
編輯
我基本上創造與單個「根」對象關聯的對象緩存,而且我不希望緩存爲靜態,因爲可能會有很多使用不同緩存的根對象,因此大量內存將用於根對象不再使用,但緩存的對象仍在周圍。
所以,我想要一個緩存對象的集合與每個'根'對象關聯,而不需要改變根對象的定義。附加到每個根對象實例的附加對象引用的類似元數據的排序。這樣,當收集根對象時,每個集合都會被收集起來,而不會像使用靜態緩存時一樣回收。
如果我理解正確的這個,有一個設計缺陷在這裏。所以如果你的緩存A中有對象B,並且對象Z有對象B的引用,那麼你說A何時離開,你還想讓B也離開?對象Z對B的引用應該發生什麼? – 2010-03-23 14:18:43
不會有對根對象以外的緩存對象的引用。如果有的話,我會希望正常的CLR強烈的引用來確保它不被收集:) – thecoop 2010-03-23 14:24:36
如果A只有B的引用,那麼當A被收集時,B自動變爲有資格收集,因爲不會再有是任何對B的引用。 – 2010-03-23 14:27:15