包含实现IDisposable的项目的会话

Chr*_*sic 7 c# asp.net session garbage-collection idisposable

在ASP.NET中,如果项目处于会话状态,即实现IDisposable,但是当会话到期时,应用程序永远不会被应用程序专门删除和处理,将在对象上调用Dispose()中的任何代码将执行?

Mar*_*ell 10

我不同意肖恩的回答; 首先,终结者应该例行地添加到类中,即使它们是IDisposable- 终结器应该只用于代表非托管资源的类中.相反,一个带终结器的课程也经常IDisposable.

重新提出问题:被Dispose()称为 - 不,不是.该对象将在未来的某个时刻被收集(不确定),但这就是它.终结器在这里不会增加太多,因为任何封装的对象也已经有资格进行收集(假设它们没有在别处引用).


Sea*_*ght 3

如果该IDisposable模式实现正确,那么是的(即类的析构函数将负责处理该对象)。我不相信 ASP.NET 会话管理器对显式调用Dispose()实现IDisposable.

请注意,尽管 Mark 强烈反对,但我并不建议“常规”添加终结器。我只是建议,如果您希望Dispose在会话过期时调用对象上的方法,那么这是一个可行的选择。

  • 终结器“不是”正确的 IDisposable 实现;相反,带有终结器的东西通常也可能是 IDisposable。但是 IDisposable 对象不应该仅仅因为它是 IDisposable 就具有终结器。 (2认同)