ASP.NET内存泄漏 - OracleCommand

时间:2012-07-16 12:11:21

标签: asp.net debugging windbg

我继承了一些类似的代码:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            Try
                Dim Test As Integer
                Dim strCon As String = "Data Source=TestDatabase;User Id=TestUser;Password=TestPassword;"
            For Test = 0 To 100000
            Dim objDBCon As New OracleConnection(strCon)
            Dim objDBCmd As New OracleCommand
            Dim objDR As OracleDataReader
            Using objDBCon
                'Using objDBCmd
                objDBCmd.Connection = objDBCon
                objDBCmd.CommandText = "SELECT * FROM nominal_incident where rownum = 1 "
                objDBCon.Open()
                objDR = objDBCmd.ExecuteReader
                'End Using

            End Using
        Next   
            Catch ex As Exception
              'Handle the exception.  It is not absorbed.
            End Try
        End Sub

这是否会导致内存泄漏?我希望看到Using语句如下:

Using objDBCmd

End Using

ASP.NET进程逐渐增长(超过1 GB),WinDBG显示堆上有OracleCommand对象(尽管没有我预期的那么多)。我想OracleCommand可以保留其他可能导致流程大小增长的资源。

2 个答案:

答案 0 :(得分:0)

Using用于在完成对象后释放对象,因此不会出现问题。 但是,using会关闭objDBCon连接。保持该连接打开并与每次调用DB共享它更有效。因此,在这种情况下,我实际上将摆脱objDBCon的使用并将其拉出for循环,只需确保在所有数据库调用之后将其关闭在循环之外。

另外,我不确定这是否是代码中的直接副本,我不知道你的代码在做什么,但100k调用db可能是因为它的内存使用如此之高并且会导致在SQL Server上负载很高。

答案 1 :(得分:0)

我不认为这会导致内存泄漏,但事实是在循环中打开了10万个连接(即使它们被合并)我认为看到这么多资源被消耗是不奇怪的。< / p>