-4

テストとして書いた以下のコードを見てください。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 の呼び出しを避けると、時間の経過とともにメモリ リークが発生しますか?

4

1 に答える 1

1

クラスにDisposeメソッドがあり、それが呼び出されていない場合は、メモリリークの原因である可能性があります。Usingを使用すると、Disposeメソッドが呼び出されます。

2番目の例は次のようになります。ここでは、すべての使い捨てオブジェクトがブロックを使用してラップされています。

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
于 2012-11-11T18:58:26.650 に答える