SqlConnection を必要とする Web サービスがあります。この SqlConnection を使用する Web メソッドは 5 つありますが、現在は各メソッドで (ローカルに) 宣言されています。この場合、それをグローバル変数にすることは受け入れられますか?
ありがとう
SqlConnection を必要とする Web サービスがあります。この SqlConnection を使用する Web メソッドは 5 つありますが、現在は各メソッドで (ローカルに) 宣言されています。この場合、それをグローバル変数にすることは受け入れられますか?
ありがとう
いいえ。
SqlConnectionのドキュメントによると:
この型の public static (Visual Basic では共有) メンバーはすべて、スレッド セーフです。インスタンス メンバーは、スレッド セーフであるとは限りません。
異なる Web メソッドが異なるスレッドから同時に呼び出される可能性があるため、それらの間で同じ接続インスタンスを共有しない方がよいでしょう。
典型的なパターンは、データベース接続が必要になるたびに新しいインスタンスを作成し、完了したらすぐに破棄するというものです。その理由の1つにスレッド化があります。接続プーリングにより、これらすべての接続インスタンスを作成するのにコストがかかりすぎないようにします。
2 つ目の接続が必要になったらどうしますか?
クラス/関数間で変数を渡し、オプションでクラスメンバーとして配置することをお勧めします。
非常に高いパフォーマンスが必要でない限り、使用するたびに各接続を開いたり閉じたりしてください。IIS またはシステムが残りの作業を行います。シンプルで効率的。