2017-06-14 4 views
1

SQL Serverデータベースの読み書きを行うDLLがあります。呼び出し元のモジュールは現在、DLLを呼び出す前にデータベースへの接続を設定します。VB.Net SQLClient。スレッド内の接続のベストプラクティス

モジュールは異なるスレッドでDLLを呼び出します。したがって、DLLのパブリックメソッドをすべて呼び出す30〜40スレッドを同時に実行することができます。

SQL Serverの場合、すべてのスレッドが同じ接続、つまりメインモジュールから渡されたスレッドを使用する方が良いか、それぞれが独自の接続を確立するのがよいでしょうか?

私は現在共通の接続を使用していますが、「このコマンドに関連付けられている開いているDataReaderは既に閉じている必要があります。すべての読者がmonitor.enter/exitブロックに入っているにもかかわらず、読者はmonitor.exit(obj)に達する前にfinsihedされます。

+0

あなたはあなた自身の質問に答えてくれたようです。あなたが1つのスレッドで行ういくつかのことは、他のスレッドが何かのために同じ接続を使用しないようにするでしょう。 – Plutonix

+1

*共通の接続を使用しないでください。すべてのサンプルとチュートリアルに、できるだけ早く接続を閉じるために 'using'ステートメントがある理由があります。接続を閉じると、サーバーで使用されているすべてのロックとリソースが解放されます。接続プーリングとは、次回接続を開いたときに再接続ペナルティを支払う必要がないことを意味します。 –

+0

私は、1つの接続を介してすべてを流すことで問題が発生するということに同意します。なぜこれを接続プーリングと対比させ、必要に応じて各スレッドがプールから接続を取得させたいのですか? – alroc

答えて

0

アドバイスをいただきありがとうございます。接続文字列を渡し、スレッドが独自の接続を作成できるようにすることで、この問題が解決されたようです。 "DataReader"の問題は、私が接続上のリーダーを作成し、それを使用することを否定したために発生しました... ...

関連する問題