2017-01-24 4 views
0

私はすでにhereをチェックしました。Forループで接続を開閉する最も良い方法

私は毎回接続をオープンしていますが、ASP.NETでパフォーマンスが低下したり、このコードを認識して自動的に最適化するかどうかはわかりません。私が今持っているもの:

For i As Integer = 0 To 100 
    cmd = New SqlCommand("UPDATE <table> where [email protected]", myConnection) 
    cmd.Parameters.Add(New SqlParameter("@id", i)) 
    Try 
     myConnection.Open() 
     cmd.ExecuteNonQuery() 
    Catch ex As Exception 
    Finally 
     myConnection.Close() 
    End Try 
Next i 

このコードを変更して毎回接続を開かないようにするにはどうすればよいですか?閉じて開き、Forループの外に出ますか?ループ内で開いている接続の存在を確認しますか? ベストプラクティスのコードサンプルが好きです。

答えて

0

まず、VB.NETで接続を開いたり閉じたりしても、実際にデータベース接続を開いたり閉じたりすることはありません。代わりに、接続プールからの接続を取得して接続プールに戻します。したがって、パフォーマンスにはまだまだ影響がありますが、最小限に抑えられています。

言われて、あなたはまだ再利用できる接続それは、おそらくこのようなコードで:

myConnection.Open() 
For i As Integer = 0 To 100 
    cmd = New SqlCommand("UPDATE <table> where [email protected]", myConnection) 
    cmd.Parameters.Add(New SqlParameter("@id", i)) 
    cmd.ExecuteNonQuery() 
Next i 
myConnection.Close() 

あなたはもちろんキャッチ/最後にまたはmyConnection.Close()が実行されることを保証するためにいくつかの他のメカニズム/してみてください追加する必要がありますすべての場合において。これにより、接続が確実にプールに戻されます。タイムアウトしない限り、接続は実際には閉じられません。

+0

ありがとう!あなたのポイント:接続が常に閉じられるように、 'For'ループ全体を' Try'ブロックに追加する必要がありますか?それは私の現在のコードよりもパフォーマンスに影響を与えませんか? – Flo

+1

修正すると、Try/Catch/Finallyを全体に追加することができ、パフォーマンスには影響しません。 –

関連する問題