【发布时间】:2019-06-04 15:32:23
【问题描述】:
当像这样使用“使用”语句时:
using (Global.Instance.BusyLifeTrackerStack.GetNewLifeTracker())
{
...
而不是
using (var lt = Global.Instance.BusyLifeTrackerStack.GetNewLifeTracker())
{
...
“using”语句是否会保留对返回对象的引用,以确保不会过早地对其进行垃圾收集?...如果没有为它声明显式变量(第一个示例代码)?
第二个示例代码显然没问题,但第一个示例代码???
任何文档和/或信息参考将不胜感激。
【问题讨论】:
-
可以,否则无法调用
Dispose。 -
是的,引用
lt仅供您在块中使用。如果你不需要使用它,你不需要声明它。 using 块将以任何一种方式处理对象。这是您偶尔会看到的一种模式,其中创建对象只是为了在其 Dispose() 方法中撤消的临时副作用。例如,我们有一个名为 WaitCursor 的类,它在构造函数中将光标设置为等待光标,并在 Dispose() 中将其恢复为之前的状态。 -
是的,一个真正的参考。正如 Ed 建议的那样,这种模式通常用于在处置中做一些有副作用的事情。例如在 Razor 中,
using(Html.BeginForm){...}允许处理返回的对象以在末尾输出</form>标记。 -
documentation for
using说了很多,当然还有the C# standard -
我刚刚验证过。我打电话给:使用 (Global.Instance.BusyLifeTrackerStack.GetNewLifeTracker()) { GC.Collect(); GC.WaitForPendingFinalizers();并调用了“Dispose”。非常感谢...是的,我知道,我应该在问我的问题之前进行验证...对不起!
标签: c# reference garbage-collection using idisposable