using 子句中的隐式变量会被垃圾回收吗?
在下面的代码中,底层代码是否包含对 Foo 类型的未命名变量实例的硬引用,或者该项目是否容易受到垃圾回收的影响?
using(new Foo())
{
// Something done here.
}
收集的项目只是一个信号量类型对象,它对资源执行一些引用计数,因此不会在代码块中引用它。
In the following code, does the underlying code contain a hard reference to the unnamed variable instance of type Foo, or is the item vulnerable to garbage collection?
using(new Foo())
{
// Something done here.
}
The collected item is just a semaphore type object that performs some reference counting on resources so it isn't being referenced in the code block.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
using
子句创建一个隐藏的本地范围变量来保存该对象(该变量由生成的finally
子句使用)。该变量可防止对象被 GC 回收。
您可以在规范中查看此变量。
The
using
clause creates a hidden locally-scoped variable holding the object (this variable is used by the generatedfinally
clause).This variable prevents the object from being GC'd.
You can see this variable in the spec.
Foo
的这个匿名实例将在 using 块之后超出范围,然后可能会被垃圾收集。this anonymous instance of
Foo
will go out of scope after the using block and may be garbage collected then.