繁体   English   中英

C#内存/分配清理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM