在以下代码中:
public class MyClass
{
public SmallObject SmallThing { get; set; }
private void MyMethod()
{
var largeThing = new LargeObject();
SmallThing = largeThing.SmallThing;
}
}
执行MyMethod()
后我引用SmallThing
但没有引用largeThing
。 Dot Net是否能够识别largeThing
有资格被收集,而它所包含的SmallObject
实例不合格?或者Dot Net是否记得largeThing
和SmallThing
之间的原始关联? (您可以假设SmallThing
不包含对程序员创建的largeThing
的显式后向引用。
答案 0 :(得分:1)
由于没有对largeThing
的有效引用,因此它有资格进行垃圾回收。没有"隐藏"或来自SmallThing
的隐式引用,以防止其符合条件。
答案 1 :(得分:1)
你是对的,largeThing
一旦你通过
SmallThing = largeThing.SmallThing;
它甚至不需要等待MyMethod
返回它才能收集它(这假定在没有附加调试器的情况下运行释放模式)。一旦largeThing
的最后一次使用通过,它就有资格收集。