5

问候,我想问一下创建单例是否只有一个与 db 的活动连接是一个好主意。我想做的是:1)我有一个 wcf 服务 2)wcf 服务从 db 获取数据 3)我想创建一个像这样的单例,只有一个到 db 的连接:

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 回答