如果对象是在using语句中创建的,并且没有显式绑定到引用,则该对象是否符合垃圾收集条件

本文关键字:对象 是否 引用 条件 绑定 语句 using 创建 如果 | 更新日期: 2023-09-27 18:10:56

我有这个(仅用于说明)c#代码:

using( new System.IO.MemoryStream() ) {
    System.Threading.Thread.Sleep(1000);
}

注意,这里创建的是MemoryStream,而不是显式绑定到引用。因此,除非因为using语句而有一些特殊处理,否则对象没有对它的引用,并且可以在控制离开using语句之前,甚至可能在Sleep()语句完成之前收集。

在control离开using语句之前,MemoryStream是否符合收集条件?

如果对象是在using语句中创建的,并且没有显式绑定到引用,则该对象是否符合垃圾收集条件

No.

using语句编译成一个finally块来处理对象。

不,它不是。

在幕后,已经创建了一个对MemoryStream的隐藏引用,因此它仍然是活的。