2009-08-13 5 views
0

セットアップのための含意:ADO.NETの接続プールとAUTOCLOSE = Trueの

は私が当社の技術サポートの人々が簡単に私たちの製品のSQL Server 2005のデータベースに対して一般的なタスクを実行できるようにするためにC#で.NET WinFormsのアプリケーションを作成しています。アプリケーションは、ADO.NET(SqlConnection)を使用してデータベースに接続しています。このアプリケーションの開発における1つの懸念は、タスク(クエリ)が開始されるたびにデータベースへの接続/再接続のオーバーヘッドを最小限に抑えることでした。私の理解からこのオーバーヘッドの主な理由は、AutoCloseプロパティが "True"に設定されているデータベースによるものです。私はこれを変更したいですが、残念ながらそれは私のコントロール下にありません。私はまた、データベース接続の作成には関係なくいくつかのオーバーヘッドが必要であることを認識しています。私は、アプリケーションのライフサイクルを通じて(以前は何らかの形で閉じていない限り)単一の接続を維持していたアプリケーションの実装を行っていました。私はconnection pooling in ADO.NETのMSDN記事を見つけました。

記事(および他の質問/回答hereherehere)を読んだ後には、ADO.NET接続プールは、私のアプリケーションが適切にそのSqlConnectionオブジェクトを処分した場合でも、データベースへの接続を維持することが表示されます。接続はプール内に保持され、一定期間アイドル状態になるか、またはそれ以外の場合は再使用されるまで再使用可能になります。したがって、私の仕事は、アプリケーション内の単一の接続が不要と単にSqlConnectionそれが必要とされるたびの処分/作成するよりも確かに多くの危険なようで維持します。

質問:

  1. 「真」に設定された「オートクローズ」とSQL ServerデータベースとのプーリングADO.NET接続を使用するときに存在している何の意味?私は私が接続プーリングはさておき、舞台裏で動作しますが、その信じている方法を説明したときに、私はoversimplifyingすることができる実現

  2. 、私の理解は正確ですか?そうでなければ、どこで修正が必要か?

答えて

2

最初の質問では、なぜデータベースは自動クローズに設定されていますか?有効なシナリオには、マルチテナントホスティングとExpressインスタンスがありますが、データベースを自動クローズに設定しないでください。

SQL Server のインスタンスで開かれたセッションを維持します。セッションは、このようにその自動閉鎖を防止、現在データベース上の参照を保持しようとしています。シナリオに1つのアプリケーションデータベースが含まれている場合、前記データベースは自動クローズ(マルチテナントではなく、数千のデータベース、シナリオではありません)する必要はありません。あなたのシナリオは、データベースの数千人が含まれている場合、その後、あなたのアプリケーションが開いているそれらを保つべきではない、とそれ以外はオープ​​ンそれらすべてを維持することはできません。

私はあなたのケースで適切なアクションは、オフを自動クローズするようにデータベースを設定することだと思います。

+0

は、私は完全にAUTOCLOSEをオフにする必要があることに同意するものとします。残念ながら、私はその決定に関してコントロールや影響力がありません。 – dcharles

+0

は私が何をするのではなく、undomented行動をプールに依存しているでしょう(すなわち。何です* *接続が彼のプールTOT引退しているデータベース現在)、私はもっぱらこの目的のために、オープンアプリで非常に明示的な接続を維持したいです。誰かが「影響力とコントロール力」を持っていると言われると、誰かが親愛なるデータベースを開いたままにして、フォークとトーチであなたを追いかけることに気付くかもしれません。 –

+0

ご協力ありがとうございます! – dcharles