【发布时间】:2015-09-05 23:31:39
【问题描述】:
变量userManager 和signInManager 都是可以实例化的类级实例成员,也可以为空。
替换它是否安全:
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (this.userManager != null)
{
this.userManager.Dispose();
this.userManager = null;
}
if (this.signInManager != null)
{
this.signInManager.Dispose();
this.signInManager = null;
}
}
base.Dispose(disposing);
}
用这个:
protected override void Dispose(bool disposing)
{
if (disposing)
{
this.userManager?.Dispose();
this.signInManager?.Dispose();
}
base.Dispose(disposing);
}
就我个人而言,我没有看到在处理变量后将变量显式分配给 null 的意义,因为它们不是静态的,据我所知,它没有做任何事情。
【问题讨论】:
-
Dispose() 方法可能会被多次调用。在某些情况下,派生自 Stream 的类非常常见。它仍然有效吗?如果没有,那么它是不安全的。
-
我想
?只是一个语法糖。可能会生成与上面相同的代码。至于分配 null:这是一个很好的问题。这对GC有什么影响吗? (我也很好奇,但我猜确实如此,尤其是如果你的课程有终结器) -
nulling 变量会删除对象之间的引用,因此理论上可以重温 GC - 更小的图形、更少的周期、更低的不必要提升到 gen+1 的机会等 - 但除非你有无数这样对象,除非您经常创建&gc 它们,否则您可能不会注意到性能差异。我个人喜欢null他们只是为了让Disposed状态“更加独特” - 并非所有伴随的对象都会在离开时抛出ObjectDisposedExcpt,保证OTOHNullReferenceExcpt。但这取决于.. 有时 nullreference 会产生误导
标签: c# dispose c#-6.0 null-conditional-operator