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