包含实现IDisposable的项的会话

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

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

请注意,尽管马克强烈反对,我并不是建议“定期”添加终结者。 我只是建议如果你在会话到期时调用你的对象上的Dispose方法,这是一个可行的选择。

我不同意肖恩的回答; 首先,终结者应该例行地添加到类中,即使它们是IDisposable – 终结器应该只用在代表非托管资源的类中。 相反,具有终结器的类通常也是IDisposable

回答问题:是Dispose()调用 – 不,它不是。 该对象将在未来的某个时刻进行垃圾收集(不确定),但这就是它。 终结器在这里不会添加太多,因为任何封装的对象也已经有资格进行收集(假设它们没有在别处引用)。

我担心会话中有Disposable对象。 它几乎肯定会为您创建可伸缩性问题。 任何Disposable都可能与某些有限的资源相关联,如果您有许多活动会话,则可能会占用该资源。 其次我希望许多(大多数?)一次性对象在Web场中不能很好地工作,因为它们所依赖的资源可能是单个机器本地的,并且它们不会序列化然后在同一台机器上反序列化州。