あなたが接続を使用しているコンテキストが何であるかはわかりませんが、私にとってうまくいくと思われるものを共有できます.
バックエンドとして SQL サーバーを使用し、キャッシュと組み合わせてパフォーマンスを向上させています。私の実践では、実際に必要な場合にのみ接続を開いたままにし、接続をプールしないようにして、すぐにクリーンアップし、SQL アクティビティ モニターでアクティブなものとそうでないものを正確に確認できるようにします。各接続はメモリを消費するため、不要なときは鈍い音を立てておくとよいでしょう。
接続のオープンとクローズの質問に答える前に、キャッシングが非常に重要であることを述べさせてください。キャッシュからオブジェクトを取得すると、時間を大幅に節約できます。私のasp.netアプリのいくつかでは、開発でキャッシュがオンになっている場合、遅延をほとんど測定できないことがわかりましたが、DB呼び出しでは、呼び出しを完了するのに15ミリ秒から45ミリ秒かかる場合があり、これは他の遅延を考慮していません要因または負荷。私が使用するもう 1 つの方法は、データの適切なオブジェクト構造であるため、何かが変更された場合にのみ DB を更新します。オブジェクトにいくつかのメソッドを実装しました。IO をできるだけ少なくするようにします。
そうは言っても、ある時点でDBにアクセスして書き込む必要があることは誰もが知っているので、2つの原則に従います。
エネルギーを節約するために、ドアと窓を閉めておきます。ある場所で開いている接続は、別の場所では使用できないことを意味します (または、メモリやその他のリソースがより制限されています)。パフォーマンスが向上したため、プーリングをオフにしました。
接続が開いているときは、バッチで、または一度にできるだけ多くのことを行います。これはもう少し複雑なので、説明しましょう。
- 私が使用した 1 つの方法は、すべてのオブジェクトが 1 つの接続オブジェクトを使用できるように、接続オブジェクトをパイプに渡すことです。これにより、アプリによっては 10 以上ではなく、1 つの接続が開いたり閉じたりすることになります。これの良い例は、統計を収集し、複雑な注文パターンをハッシュ化するために SQL サーバーの機能を利用する購入モデルの 1 つです。200K 以上の DB ルックアップを作成している場合や、アプリの目的が何であれ、接続を開いたり閉じたりし続けるのは意味がありません。これの他の部分は、オブジェクトを使用するときに、更新をバンドルして、接続を開いたままにしておく時間を短縮しようとすることです。したがって、insert 呼び出しで scope_identity を実行すると、オブジェクトをキャッシュする前に、挿入と一意の ID のルックアップの両方を処理して、オブジェクトに追加できます。私が最初に ASP アプリを開発していた頃は、ページの読み込みが開始されるとすぐに実際に接続を開き、その後閉じていました。もうそれをすることはお勧めしません。現在、この種の抽象化とレイヤーには大きな利点があり、初心者のプログラマーは注意深く注意することをお勧めします。
私の2セント:
データをキャッシュしましょう!データをキャッシュしましょう!データをキャッシュしましょう!データをキャッシュしてからキャッシュできない場合は、DB アクセスをできるだけ少なくしてください。