这主要是出于好奇,因为有更好的方法来实现我能想到的几乎所有用例(至少在 C# 和我经常使用的其他语言中),但我最近在这里看到一个 scoped mutex这是一个很酷的概念。
我的问题是,using 语句是否维护对其作用的对象的引用(即:防止 GC 运行)?
例如,如果我要这样做:
using (new ScopedMutex())
{
// ...
}
ScopedMutex 对象会一直存在到 using block 的末尾,还是 GC 会运行并在 block 中处理它?</p>
最佳答案
不,GC 不会处理它。对该对象的引用存储在局部变量 ( see this answer for more info ) 中。一个局部变量被认为是一个 GC 根,并且该对象可以从它到达(它需要可以到达 using
block 才能调用 Dispose
)。
关于c# - using block 是否为 GC 创建和维护引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330486/