c# – 垃圾收集如何在对象引用上工作?
发布时间:2020-12-15 06:27:15 所属栏目:百科 来源:网络整理
导读:我对垃圾收集过程感到困惑. object A = new object();object B = A; B.Dispose(); 通过在变量B上调用Dispose,创建的对象将不会被垃圾回收 因为对象仍由A引用. 现在以下代码的工作方式与上述相同? public static image Test1(){ Bitmap A = new Bitmap(); re
我对垃圾收集过程感到困惑.
object A = new object(); object B = A; B.Dispose(); 通过在变量B上调用Dispose,创建的对象将不会被垃圾回收 现在以下代码的工作方式与上述相同? public static image Test1() { Bitmap A = new Bitmap(); return A; } 现在我从一些其他方法称这个静态函数. public void TestB() { Bitmap B = Test1(); B.Dispose(); } 静态函数Test1返回对Bitmap对象的引用.引用被保存 有没有办法立即处理从静态函数传递的引用? 解决方法
我可能会离开,但是你似乎对Dispose和垃圾回收有误解.一旦对所有引用的对象都将以非确定性的方式消失,垃圾回收将被收集.处理通常会摆脱非托管资源,所以对象准备好被垃圾回收.在你的第一个例子中,你放弃了对象,理论上使它不可用,但是它仍然存在于堆上,而且还有一个对A和B的引用.一旦超出范围,垃圾回收器就可以回收那个内存但并不总是.在示例2中,位图A放置在堆上,然后返回它的引用,并将B设置为该引用.然后你处理它,B超出范围.在这一点上,没有更多的引用存在,它将在以后被垃圾回收.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读