在 ASP.NET 中,如果项目保留在实现 IDisposable 的会话状态,但在会话到期时从未被应用程序专门删除和处置,是否会对 Dipose() 中的任何代码将执行的对象调用 Dispose?
Chris Marisic
问问题
2695 次
3 回答
10
我不同意肖恩的回答;首先,终结器不应该经常添加到类中,即使它们是IDisposable
- 终结器应该只真正用于表示非托管资源的类中。相反,带有终结器的类通常也是IDisposable
.
问题是:被Dispose()
称为-不,不是。该对象将在将来的某个时候被垃圾收集(不确定),但仅此而已。终结器不会在这里添加太多,因为任何封装的对象也已经有资格被收集(假设它们没有在其他地方引用)。
于 2009-01-31T09:04:37.237 回答
3
如果IDisposable
模式被正确实现,那么是的(即类的析构函数将负责处理对象)。我不相信 ASP.NET 会话管理器对显式调用Dispose()
实现IDisposable
.
请注意,尽管 Mark 强烈反对,但我并不是建议“常规地”添加终结器。我只是建议,如果您希望Dispose
在会话到期时调用对象上的方法,这是一个可行的选择。
于 2009-01-31T02:56:14.967 回答
1
我会担心在 Session 中有 Disposable 对象。它几乎肯定会为您带来可扩展性问题。任何可处置的东西都可能与某些有限的资源相关联,如果您有许多活动会话,您可能会用完该资源。其次,我希望许多(大多数?)一次性对象在网络场中无法正常工作,因为它们所绑定的资源可能是单台机器的本地资源,并且它们不会在同一台机器上序列化然后反序列化状态。
于 2009-01-31T14:20:01.577 回答