首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#内存/分配清理

C#内存/分配清理
EN

Stack Overflow用户
提问于 2012-10-19 00:51:29
回答 1查看 476关注 0票数 1

一些近似的代码试图说明这个问题,什么时候对象被标记为可用来进行垃圾收集--

代码语言:javascript
复制
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对象将被标记为垃圾回收。

是那么回事吗?谢谢你的见解。

EN

回答 1

Stack Overflow用户

发布于 2012-10-19 00:52:56

是这样的吗?

是的,当main方法完成执行时,tb变量就会超出作用域(当然,除非您将指向它的指针添加到另一个具有更大作用域的变量中),并且tb有资格进行垃圾回收。当然,实际的垃圾收集发生的时间是您无法控制的。它可能会在main方法完成执行之后很久才发生。是CLR决定了最佳时机。因此,如果在main方法结束后没有立即回收分配的所有内存,也不要感到惊讶。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12959756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档