使用和垃圾收集

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.


Joe*_*orn 0

object2 不会object1 一起被销毁(处置)。但是,为 using 语句创建了一个单独的作用域块,因此此时 object2 确实超出了作用域。它的处置只是不确定的。

另外,如果 object2 也是 IDisposable 你可以这样做:

using (object1)
using (object2)
{
} // bookmark1
Run Code Online (Sandbox Code Playgroud)

不管怎样,正常的垃圾收集规则都适用:对象的托管资源(内存)仍然以正常方式处理。使用/IDisposable 仅释放非托管资源。