SQL Server 2008 を使用する ASP.Net 2.0 Web フォーム アプリケーションがあります。アプリケーションには、UI レイヤーとデータ アクセス レイヤーがあります。Enterprise Libray 5.0 を使用してデータを永続化します。
最近、私のサイトの実行速度が非常に遅くなりました。特に、データベースから 15 ~ 20 回の個別の読み取りが行われるページで顕著です。SqlDataReader データベース接続が適切に閉じられていないことを非常に懸念しています。以下は、コードがどのように機能するかの例です。接続の漏れに関して問題がある場合は、ご覧ください。
データ アクセス クラス
Public Class DataAccess
Private db As Database = DatabaseFactory.CreateDatabase()
Public Function ExecuteDataReader(ByVal params() As SqlParameter, ByVal SProc As String) As SqlDataReader
Dim i As Integer
Dim dr As SqlDataReader = Nothing
Dim cmd As DbCommand
cmd = db.GetStoredProcCommand(SProc)
cmd.CommandTimeout = 120
For i = 0 To params.Length - 1
db.AddInParameter(cmd, params(i).ParameterName.ToString, params(i).DbType, params(i).Value)
Next
dr = TryCast(DirectCast(db.ExecuteReader(cmd), RefCountingDataReader).InnerReader, SqlDataReader)
Return dr
End Function
UI コード ビハインド ページ
Dim drSource As SqlDataReader = Nothing
Try
Dim params(0) As SqlParameter
params(0) = New SqlParameter("@applicant_id", Session("ApplicantID"))
drSource = DataAccess.ExecuteDataReader(params, "sp_get_date_last_login")
If drSource.HasRows Then
drSource.Read()
'Do code
End If
Finally
If Not (drSource Is Nothing) Then
drSource.Close()
End If
End Try
以下のコードをExecuteDataReaderメソッドに入れようとしましたが、これにより、読み取りを実行する前に SqlDataReader が閉じられます。
if (cmd.Connection.State == ConnectionState.Open)
cmd.Connection.Close();
誰かが上記のコードを見て、データベース接続を適切に閉じる方法を教えてもらえますか、またはすでに行っているのでしょうか?
助けてくれてありがとう。