是否有任何方式以广义方式将对象实例(对象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