Raj*_*Rao 9 c# garbage-collection dispose idisposable finalizer
根据文档(MSDN:链接),很明显在实现终结器时应该使用IDisposable模式.
但是,如果实现IDisposable(以便提供处理对象的确定性方法),您是否需要实现终结器?并且您没有任何非托管资源来清理?
在我看来,如果类只有托管资源,如果你不调用Dispose,那么托管资源将自动被GC清理,因此不需要实现终结器.我错了吗?
另外,如果我使用我的Dispose方法清理事件处理程序,该怎么办?由于Dispose不会自动被GC调用,我应该实现Finalizer,以确保事件处理程序无线连接吗?
SLa*_*aks 10
除非您拥有非托管资源,否则不应添加终结器.
拥有托管可支配资源但不拥有非托管资源的类应该实现完整Dispose
模式,但没有终结器.
如果该类不是sealed
,则应该GC.SuppressFinalize(this)
在其Dispose()
继承的类添加终结器的情况下调用其方法.
adr*_*nks 10
不,如果您有一个实现IDisposable的类(即如果您已正确实现模式,并且您只有托管资源可以处置),则不需要实现终结器.
(如果这样做,它实际上会影响对象的生命周期,因为带有终结器的对象会被添加到GC中的终结队列中,并且可以比他们需要的时间更长 - 如果对象很大,这可能是个问题.)
归档时间: |
|
查看次数: |
4028 次 |
最近记录: |