c# – 垃圾收集如何在对象引用上工作?

前端之家收集整理的这篇文章主要介绍了c# – 垃圾收集如何在对象引用上工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对垃圾收集过程感到困惑.
object A = new object();
object B = A;        
B.Dispose();

通过在变量B上调用Dispose,创建的对象将不会被垃圾回收
因为对象仍由A引用.

现在以下代码的工作方式与上述相同?

public static image Test1()
{
    Bitmap A = new Bitmap();
    return A;
}

现在我从一些其他方法称这个静态函数.

public void TestB()
{
   Bitmap B = Test1();
   B.Dispose();
}

静态函数Test1返回对Bitmap对象的引用.引用被保存
在另一个变量B中.通过在B上调用Dispose,B和对象之间的连接丢失,但是从Test1传递的引用会发生什么.直到功能TestB的范围完成才能保持活动状态吗?

有没有办法立即处理从静态函数传递的引用?

解决方法

我可能会离开,但是你似乎对Dispose和垃圾回收有误解.一旦对所有引用的对象都将以非确定性的方式消失,垃圾回收将被收集.处理通常会摆脱非托管资源,所以对象准备好被垃圾回收.在你的第一个例子中,你放弃了对象,理论上使它不可用,但是它仍然存在于堆上,而且还有一个对A和B的引用.一旦超出范围,垃圾回收器就可以回收那个内存但并不总是.在示例2中,位图A放置在堆上,然后返回它的引用,并将B设置为该引用.然后你处理它,B超出范围.在这一点上,没有更多的引用存在,它将在以后被垃圾回收.
原文链接:/csharp/95547.html

猜你在找的C#相关文章