[英]C# memory / allocation cleanup
一些近距离代码试图说明这个问题,即何时将对象标记为可以进行垃圾收集-
class ToyBox
{
public List<Toy> Toys = new List<Toy>();
}
class Factory
{
public ToyBox GetToys()
{
ToyBox tb = new ToyBox();
tb.Toys.Add(new Toy());
tb.Toys.Add(new Toy());
return tb;
}
}
main()
{
ToyBox tb = Factory.GetToys();
// After tb is used, does all the memory get cleaned up when tb goes out of scope?
}
Factory.GetToys()分配内存。 何时清理内存? 我假设当Factoy.GetToys()返回ToyBox对象时,对ToyBox对象的唯一引用是main()中的引用,因此当该引用超出范围时,将Toy对象和ToyBox对象标记为垃圾回收。 。
那正确吗? 感谢您的任何见解...
那正确吗?
是的,当main
方法完成执行时, tb
变量超出范围(除非您向该变量添加了指向更大范围的另一个变量的指针),并且tb
可以进行垃圾回收。 当然,实际的垃圾回收发生时不受您的控制。 在main
方法完成执行之后,可能会发生很多。 决定最佳时刻的是CLR。 因此,如果您没有在main
方法完成后立即收回所有分配的内存,请不要感到惊讶。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.