私はスレッドプールを使用して、重い処理と少しのSQLを実行しています。現在、必要なときにSQL接続を開き、クエリを実行してから閉じます。これはうまくいきます。アプリケーションは問題なく実行されています。このアプリケーションは、より多くの作業を行うため、より多くのスレッドを使用しています。より多くのスレッドは、より多くの SQL 接続の開閉を意味します。SQL 2005 では、これは実際にサーバーに打撃を与えます。私のテスト サーバーは、1 秒あたり約 175 トランザクションを実行しています。これらのうち約 150 が master データベースで実行されており、「ValidateSQLLogin」です。
各スレッドに独自の接続があり、この接続がスレッド全体に渡されるようにアプリを変更します。
だから私の質問は:
SQL 接続オブジェクトがスレッド内でローカルに作成され、ref によって別のクラスの静的関数に渡される場合、これは安全ではありませんか?
void ThreadA()
{
SqlConnection a = new SqlConnection(....);
MyStaticClass.DoStuff(ref a);
}
void ThreadB()
{
SqlConnection b = new SqlConnection(....);
MyStaticClass.DoStuff(ref b);
}
static void MyStaticClass.DoStuff(ref SqlConnection sql)
{
// Do stuff with sql
}
私の最初の考えは、10 個のスレッドがすべて同時に同じ静的関数を呼び出し、それぞれが独自の接続オブジェクトを渡す可能性があるため、安全ではないということです。
以前は、静的関数は独自の接続を開き、完了時に閉じていました。
安全でない場合、これを回避する最善の方法は何ですか。SQL接続の開閉を最小限に抑える必要があります。
ありがとう
ガレス