Dav*_*idS 5 c# garbage-collection using
如果我有以下内容,你好只是为了clairfy:
using (Object1) {
create Object2
}
// bookmark1
Run Code Online (Sandbox Code Playgroud)
将Object2与Object1一起销毁到Object2吗?Object2是StringReader,Object1是MemoryStream.
Bev*_*van 18
两个对象都不会在块结束时被销毁.
Object1将是Disposed,一个不同的概念; Object2什么都不会发生.
这两个对象都将被收集,并可能在稍后的时间内完成.垃圾收集是非确定性的 - 您不能依赖垃圾收集何时发生.
有关详细信息,请参阅MSDN上的IDisposable.
object2 不会与object1 一起被销毁(处置)。但是,为 using 语句创建了一个单独的作用域块,因此此时 object2 确实超出了作用域。它的处置只是不确定的。
另外,如果 object2 也是 IDisposable 你可以这样做:
using (object1)
using (object2)
{
} // bookmark1
Run Code Online (Sandbox Code Playgroud)
不管怎样,正常的垃圾收集规则都适用:对象的托管资源(内存)仍然以正常方式处理。使用/IDisposable 仅释放非托管资源。