1

私が取り組んでいるasp.netアプリケーションには、数百人のユーザーが接続しようとしている可能性があります。プール内の最大接続数に達したというエラーが表示されます。ADO.NET の接続プールの概念は理解していますが、テストでは、接続が確立されてからブラウザーが閉じられた後、ms sql 2005 サーバーで接続が「スリープ」のままになっていることがわかりました。接続文字列で接続の有効期間を制限しようとしましたが、これは効果がありません。接続の最大数をプッシュする必要がありますか? 本当の問題を完全に誤診してしまったのでしょうか?

4

1 に答える 1

2

すべてのデータベース接続は、try...finally でラップする必要があります。

SqlConnection myConnection = new SqlConnection(connString);
myConnection.Open();
try
{
}
finally
{
   myConnection.Close();
}

または...もっと良いのは、 Dispose メソッドで Close() 呼び出しを持つ DAL (データ アクセス レイヤー) を作成し、すべての DB 呼び出しをusingでラップすることです。

using (MyQueryClass myQueryClass = new MyQueryClass())
{
   // DB Stuff here...
}

いくつかの注意事項: ASP.NET は、接続の解放をユーザーに依存しています。範囲外になった後、GC を介してそれらを解放しますが、接続プールが実行されるまでに余裕があるよりもはるかに長い時間がかかる可能性があるため、この動作を当てにすることはできませアウト。そういえば、ASP.NET は実際に接続をデータベースにプールします (古い接続を完全に解放してからデータベースから新たに要求するのではなく、古い接続をリサイクルします)。あなたに関する限り、これは実際には問題ではありません。それでも Close() を呼び出す必要があります。

また、接続文字列 (最小/最大プール サイズなど) を使用してプーリングを制御することもできます。詳細については、MSDN のこの記事を参照してください。

于 2009-09-16T18:12:53.303 に答える