如果对象是在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
是否符合收集条件?
No.
using
语句编译成一个finally
块来处理对象。
不,它不是。
在幕后,已经创建了一个对MemoryStream
的隐藏引用,因此它仍然是活的。