データベースへの接続のパフォーマンスについて疑問に思っています。各クエリ間でデータベース接続を閉じても問題ありませんか、それとも完了するまで開いたままにしておくべきですか? 接続の開閉の速度ペナルティは高いですか?
質問する
1070 次
3 に答える
6
ADO.NET は、接続を「プール」します。接続を閉じると、実際には閉じられませんが、プールに配置されます。同じ接続文字列で新しい接続が要求されると、プールからの接続が再利用されます。プールは非常に高速であるため、実際には、接続を開くのは事実上無料です。
ベスト プラクティスは、必要なときに接続を開き、次の直後に閉じることです。
using (var db = new SqlConnection(connectionString)) {
... retrieve data ...
}
そのようにコーディングすれば、接続の存続期間についてまったく心配する必要はありません。
于 2012-06-24T15:47:39.120 に答える
2
接続の作成、開始、および終了に関連するオーバーヘッドがあるため (接続プールが使用されている場合でも、この一部は発生します)、理想的には、一度接続し、すべてのデータを取得してから、接続を閉じて破棄する必要があります。using
接続を必要以上に長く開いたままにしないように、必ずこのアプローチを使用する必要があります。
于 2012-06-24T15:48:02.807 に答える
1
私の経験では、接続の開閉は良いのですlow volume application
が、high volume application
では、接続の開閉にかかるコストが大きくなります。したがって、コンテキストに完全に依存しています。大規模なアプリケーションで作業している間、接続プーリングがうまくいきません。ADO.NET
確実に接続プーリングを処理します。
于 2012-06-24T15:57:26.593 に答える