3

かなりの量のコードを含むWeb アプリケーションのメソッドがあります。メソッドのほぼ反対側で、データベースとのやり取りがあります。

接続を複数回開いたり閉じたりするか、最初に必要になったときに接続を開き、最後に必要になったときに閉じるのがベストプラクティスですか?

複数回

connection.Open();
//execute db interaction
connection.Close();

//execute business logic

connection.Open();
//execute db interaction
connection.Close();

//execute business logic

connection.Open();
//execute db interaction
connection.Close();

//etc...

最初に開く/最後に閉じる

connection.Open();
//execute db interaction

//execute business logic

//etc...

//execute db interaction
connection.Close();
4

3 に答える 3

7

これを行うための理想的な方法は、最初の接続ですべてのデータを取得することです。ただし、非常に時間がかかるコードを含む大規模なメソッドがある場合、メソッド呼び出しの全期間にわたって接続を開いたままにしておくと、コストがかかります。

このため、(データベースの場合) 2 回開いて閉じる方がはるかに効率的です。データベースの背後にある考え方は、他のユーザーが使用するリソースを消費しないように、データベースをできるだけ早く開いたり閉じたりすることです。

私は若い頃、たくさんのサーバーをクラッシュさせたときにこれを苦労して学びました。とにかく、プールされた接続を使用していることを確認してください(手動で設定する必要があるかどうかはわかりません)

于 2013-02-28T15:01:13.713 に答える
3

メソッドごとに1つの接続を使用します。

public void MyMethod(){
  using(SqlConnection conn = new SqlConnection()){

    ..all of your code

  }
}

より知識のある人がより良い答えを提供するかもしれません。

于 2013-02-28T15:02:14.187 に答える
0

http://ericlippert.com/2012/12/17/performance-rant/

2 頭の馬がいて、どちらが速いかを知りたい場合は、競馬をしてください。馬の簡単な説明を書いたり、インターネットに投稿したり、ランダムな見知らぬ人にどちらが速いかを推測してもらったりしないでください。たまたま正確な答えが得られたとしても、その正確さにどのように自信を持てますか? 2 つのプログラムのどちらが速いかを自分で実行し、ストップウォッチで測定することで、簡単かつ正確に見つけることができます。

接続が終了したらすぐに接続を閉じて、基礎となるデータベース接続がプールに戻り、他の呼び出し元が利用できるようにします。接続プーリングはかなり最適化されているため、そうすることによる顕著なペナルティはありません。アドバイスは基本的に取引の場合と同じです。完了したら、取引を短くして閉じてください。

于 2013-02-28T15:00:45.703 に答える