【发布时间】:2013-09-10 12:09:39
【问题描述】:
我有一个问题,我的 .NET 3.5 应用程序导致 IIS 工作进程不断消耗内存并且在应用程序开始抛出与内存相关的错误之前永远不会释放它,我必须回收 IIS 工作进程。我注意到的另一件事是,与 Oracle DB 服务器的连接也不会关闭,并且会保持打开状态,直到我回收 IIS 工作进程(据我所知,我正在正确关闭 Oracle 连接)。从我在其他类似帖子中读到的内容来看,GC 应该清理未使用的内存并允许重新分配它,但这显然不会在这里发生(我在远程主机和本地主机上都观察到同样的问题。我将假设这不是与 IIS 设置相关的问题,而是我没有在我的代码中做适当的清理工作;我应该看什么?谢谢。
这是我与查询 Oracle DB 相关的代码:
Using conn As New OracleConnection(oradb)
Try
cmd.Connection = conn
daData = New OracleDataAdapter(cmd)
cbData = New OracleCommandBuilder(daData)
dtData = New DataTable()
dtDADPLIs = New DataTable()
conn.Open()
cmd.CommandText = "SELECT * FROM TABLE" _
daData.Fill(dtData)
cmd.CommandText = "SELECT * FROM TABLE2"
daData.Fill(dtDADPLIs)
QueryName = "SD_TIER_REPORT"
WriteQueryLog(QueryName)
Catch ex As OracleException
'MessageBox.Show(ex.Message.ToString())
Finally
conn.Close()
conn.Dispose()
End Try
【问题讨论】:
-
您是否在应用程序中实现
using(OracleConnection cn = new OracleConnection()) {...}语法糖以在连接对象关闭后对其进行处置?你能告诉我们你的代码通常是如何打开一个连接然后关闭/处理它的吗? -
另外,在问这样的问题时,您能否指定 Windows/IIS 版本以及与您的应用程序池配置相关的位置。
-
我正在使用带有 IIS 5.1 的 Windows XP。我在下面添加了 Oracle 连接代码
-
@StephenT:你为什么不用这段代码更新你的问题?
-
我可以看到您正在使用数据表。你打算读多少条记录?缓冲区大吗?