ASP.NET で Web サービス (具体的には asmx と WCF を使用) を使用する場合、SQL 接続を確立する最良の方法は何ですか? 現在、Web サービス呼び出しごとに新しい接続を確立していますが、何千ものユーザーが接続する場合、これが効率的すぎるとは思えません。このトピックに関する洞察をいただければ幸いです。
4 に答える
あなたがしていることはかなり標準的です。
同じ接続文字列を使用していると仮定すると、接続は接続プールから取得されます。これは、既に接続を取得する最も効率的な方法です。
必要な作業のみを行い、各呼び出しで接続を閉じることをお勧めします。
できることの 1 つは、結果をキャッシュし、キャッシュ アイテムの存続期間中にデータが変更される可能性が低い呼び出しに対して、キャッシュされた結果を返すことです。これにより、データベース呼び出しが減少します。
接続がプールに戻されるように、使用が終了したら常に接続を閉じることを強くお勧めします。これを行うには、ConnectionオブジェクトのCloseメソッドまたはDisposeメソッドを使用するか、C#のusingステートメント内のすべての接続を開きます。明示的に閉じられていない接続は、プールに追加または戻されない場合があります。
接続文字列に「Pooling=true」を追加する(そしてゼロ以外の「MinPoolSize」を追加する)必要があります。
デフォルトでは、SqlConnections は接続プーリングを利用します。これにより、システムは要求ごとに「新しい」接続を真に作成するのではなく、以前の接続オブジェクトの再利用を管理できます (プールの最大値まで)。ビルトインなので、それを活用するために何もする必要はありません。
独自のプーリング/接続マネージャーを作成することは危険に満ちており、あらゆる種類の悪につながるため、システムがプールからの接続を管理できるようにすることがおそらく最善の策です。
プロバイダーに接続プールを処理させます。それよりもうまくやろうとしないでください - あなたは失敗します。
デフォルトの接続設定では、プロバイダーは接続プールを維持します。閉じる/破棄すると、接続は実際にはプールに解放されます。必ずしも完全に閉じているとは限りません。