5

あいさつ、dbへのアクティブな接続が1つだけになるようにシングルトンを作成するのは良い考えかどうかを尋ねたいと思います。私がやりたいことは次のとおりです:1)私はwcfサービスを持っています2)wcfサービスはdbからデータを取得します3)私はdbへの接続が1つだけになるようにこのようなシングルトンを作成したいと思います:

private static PersistanceSingleton _Instance;
    public static PersistanceSingleton Instance
    {
        get
        {
            if (_Instance == null)
            {
                _Instance = new PersistanceSingleton();
            }
            return _Instance;
        }
    }

私はこれが理想的なシングルトンではないことを知っていますが、私はこの投稿の目的のためにそれを書いただけです。ここにいくつかの永続リポジトリが必要であり、コンストラクタでそれらをインスタンス化します。サービスクラス内には、コンストラクター内に次のコードがあります

_DBPersistanceSingleton = PersistanceSingleton.Instance;

次に、何らかのリクエスト(GetUsersRequestなど)が来たら、次のようなことをしたいと思います。

_DBPersistanceSingleton.GetUsers()

dbの各呼び出しを実行する前に、SqlConnectionが開いているかどうかも確認します。これが良い習慣であるかどうか私に知らせてください。私がこのソリューションについて考える理由は、クライアントアプリケーションを介してそのサービスに接続する多数のユーザーのためです

4

3 に答える 3

14

そのように再利用するのは良い習慣ではありませんSqlConnection。必要なときに開き、使い終わったらすぐに閉じます。接続プールは、接続を再利用する内部で機能します。

于 2010-03-04T19:12:56.260 に答える
3

いいえ、しないことを強くお勧めします。複数のリクエストが同時に入ってくるとどうなりますか?それらすべてが同時に同じ接続を使用することはできません。せいぜい、大きなボトルネックを導入するだけです。

接続プールは自動的に処理され、煩わしさを解消するので、心配する必要はありません。必要に応じて接続を開閉するだけです。

于 2010-03-04T19:15:24.110 に答える
2

SQL接続を脇に置いて...

このシングルトンパターンはスレッドセーフではないため、マルチスレッドアプリケーションで使用することはお勧めできません(WCFサービスがそうである可能性が高いため)。

このコードでは、複数のリクエストが同時に到着した場合、複数のインスタンスが作成される可能性があります。

于 2010-03-04T19:16:48.920 に答える