0

今日:

私は、非常に基本的な選択、更新、および挿入を実行する同じ資格情報を使用して、同じ (Oracle) データベースへの多数の (sql) 接続を常に作成および閉じるアプリケーションで作業を続けています。

現在、 asingleton CustomConnectionManagerはそのプールをチェックして、配布可能な があるかどうかを確認しますCustomConnector。一度配布されると、それらはクライアントによって閉じられる場合があります。基礎close()となるSQLConnection(によって作成および維持されるCustomConnector) も閉じられます。が利用できない場合CustomConnectorは、新規CustomConnector作成されます。

これの良いところは、使用するたびに最終的にSQLConnection閉じたままになることですが、値が not にあるため、再利用はほとんど行われSQLConnectionませんCustomConnector

システムのすべてのユーザーが同じデータベースに接続するため、同じ単一の接続を使用してすべての要求に対応できます。要求ごとに新しいコネクタを作成する元のソリューションは、非常に無駄に思えます。

提案:

singleton CustomConnectionManager2 つのキューを維持します。

  • available のキューCustomConnector、それぞれがそれ自身を維持しSQLConnection
  • s のキューinUse CustomConnector。リクエストに応じて、新しいCustomConnectorものを作成して配布します。

クライアントとの対話は、singleton CustomConnectionManager.

新しい接続が必要になると、マネージャーはそれを作成し、クライアントに渡し、inUseキューに入れます。クライアントが接続の使用を終了すると、接続を閉じる代わりに、クライアントは.markConnectorAvailable()それをキューに戻しavailableConnectorsます (クライアントは基になる SQLConnection を制御できなくなります)。

質問 1: どう思いますか? これは機能しますか?すでにこれをうまく行っている既存のソリューションはありますか?

CustomConnector質問 2: 提案されたアプローチが完全な無駄ではない場合、 がSQLConnections を閉じるのに適した点は何ですか?

4

1 に答える 1

0

それが接続プーリングです。ADO.Netは、設定された時間内に使用されないとそれらを殺します(接続文字列で設定できます(私が覚えているように、デフォルトは2分です))。

于 2012-05-09T00:46:29.483 に答える