Asp.net 内存泄漏-SQLCommand对象?

Asp.net 内存泄漏-SQLCommand对象?,asp.net,vb.net,memory-leaks,Asp.net,Vb.net,Memory Leaks,请看下面的代码,这是我作为测试编写的。它不会使ASP.NET进程增长过多: Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Try Dim Test As Integer For Test = 0 To 1000000 Test1() Ne

请看下面的代码,这是我作为测试编写的。它不会使ASP.NET进程增长过多:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try

            Dim Test As Integer

            For Test = 0 To 1000000
                Test1()
            Next
            Dim Test2 As String = "Test"
        Catch ex As Exception

        End Try
    End Sub

    Public Sub Test1()
        Try

            Dim objCommand As New SqlCommand
            Dim strConString As String = "Data Source=IANSCOMPUTER;Initial Catalog=Test;Integrated Security=True"
            Dim objCon As New SqlConnection
            objCon.ConnectionString = strConString
            objCon.Open()
            objCommand.Connection = objCon
            objCommand.CommandText = "select * from person "
            Dim objDR As SqlDataReader = objCommand.ExecuteReader
            If objDR.HasRows Then
                Using objCon

                End Using
            End If
        Catch ex As Exception
          'I don't swallow exceptions. 
        End Try
    End Sub
End Class
我正在尝试检测内存泄漏。我在受影响的项目中发现了与上述类似的代码。我注意到没有调用objCommand.dispose。该项目连接到Oracle数据库和SQL数据库。连接到SQL数据库时,使用上述代码。当连接到Oracle数据库时,将使用Oracle.dataaccess.dll,代码看起来与此不同


我的具体问题是:如果我避免调用sqlcommand.dispose,那么随着时间的推移,这会导致内存泄漏吗

如果一个类有一个Dispose方法,而该方法没有被调用,那么它很可能是内存泄漏的来源。使用Using,它将为您调用Dispose方法

您的第二个示例应该如下所示,其中所有一次性对象都使用块包装

Dim strConString As String = "Data Source=IANSCOMPUTER;" +
                              "Initial Catalog=Test;Integrated Security=True"
Dim sqlStr as String = "select * from person "
Using objCon As New SqlConnection(strConString)
    Using objCommand As New SqlCommand(sqlStr, objCon)
        objCon.Open()
        Using objDR As SqlDataReader = objCommand.ExecuteReader
            If objDR.HasRows Then
            End If
        End Using
     End Using
End Using

如果objRdr.HasRows为False,则不会关闭objCon。在使用Try..Catch时,需要确保在Finally部分中关闭SqlConnection。你为什么要把几乎所有的东西都命名为obj?而strConString正在变得愚蠢;)@安德鲁·莫顿,谢谢。在本测试中,我可以确认objDR.HasRows将始终返回true。MSDN似乎支持您的论点。你能解释一下为什么我提供的代码似乎不会导致内存泄漏吗?谢谢。我想是的,只是没有在你的测试中出现。