我们的ASP.NET应用程序正在使用COM +连接到数据库
我们有这个结构:
基类:
导入System.EnterpriseServices
Public Class Base Inherited ServicedComponent
儿童班:
Public Class Member Inherits Base
“Propreties 。 。
'Methods
Public Sub SetMember(ByVal SelectedQueue As String)
...
End Sub
在Aspx页面中,我们搜索成员并设置详细信息:
Dim newMember As Member = New Member
newMember.SetMember(MemberNumber)
Session("SelectedMember") = newMember
然后我们处理newMember:
If Not newMember Is Nothing Then
newMember.Dispose()
End If
但是当我们访问会话时,我们得到了一个例外:
If Not Session("SelectedMember") Is Nothing Then
'Something
Else
'Something else
End If
例外是: 无法访问已处置的对象。对象名称:'ServicedComponent'。
如何处置对象但保持会话有效?
答案 0 :(得分:1)
我可以看到你做错了什么,但不清楚什么是对的。您所陈述的逻辑是:
在5之前有3个没有意义。
如果快速获取对象,则应该在每个页面上执行此操作。 (通常人们高估了这个成本)。
如果对象的获取速度很慢,并且长期存储是有意义的,那么就不需要清理它。什么是Dispose()实际上在这里做什么?随着它根据需要获取和释放成员使用的资源。
我怀疑第一个是去的地方,但这主要是猜测。
当你谈论数据库时,我也会担心你的对象是否持有数据库连接?如果是这样,并且池可用,那么您应该尽快释放这些连接,而不是保留它们。