通过搜索堆栈溢出和其他站点,我了解到单例是一种糟糕的编程实践。我在很大程度上依赖于OleDbConnection来连接到SqlServer,我有一些页面可以像20+一样实例化一个连接。我想用一个单例来代替它,以避免在已经打开一个连接时打开连接。
我的问题是:在我的情况下,Singleton是不是很糟糕?在sql server 2008上实现多个连接的最佳方法是什么?
发布于 2012-01-23 02:18:07
你所描述的与Singleton无关...单例本身既不好也不好--只有当使用错误的原因时,它才是坏的(就像所有的东西一样)。
至于你的连接问题:
这种情况通常是通过连接池解决/处理的。
你可以自己实现(不推荐)……根据您使用的ADO.NET提供商,它可能已经提供了一个实现良好且经过良好测试的连接池(例如,来自Devart的连接池-没有附属关系,只是一个快乐的客户)……
连接池为DB连接提供了一种缓存...当你需要一个时,你从池子里得到它,当你完成后,你把它还给池子…池将连接保持在周围(自上次使用或类似的可配置时间段)...由于池中的连接已经创建并打开,因此您可以获得显著的速度优势……
OTOH如果你使用的连接使用不同的登录和/或连接设置,那么你不能真正从连接池中获利……
更新:
OleDB提供了一个内置的连接池机制--详情请参阅MSDN。根据MSDN的说法,它是默认启用的...关闭/释放连接时,它将自动返回到池中...这反过来意味着对于您的情况,您可能已经在使用池机制(假设您正在使用OleDB的默认设置)。
发布于 2012-01-23 02:09:48
单例不是正确的选择,因为它是一个推荐的做法,以关闭连接,当你做完你的数据库transaction.Even如果你需要频繁的数据库连接,你应该在你需要的时候打开连接,并尽快关闭它。
除此之外,Singleton完全不是一个糟糕的编程实践。Singleton是编程中广泛使用的模式。没有模式是糟糕的编程实践。只是你应该在一种场景中使用它们,在这种场景中,它们可以很好地适应和理解。如果您将在不适当的场景中使用模式,这将是一个糟糕的编程实践。
编辑
为了清楚起见,在我看来,经验法则应该是您不应该为将来的操作保持连接开放。如果有一些挂起的事务,显然最好使用相同的连接来执行所有事务。但是,对于将来可能需要执行的操作,您不应该保持连接打开
https://stackoverflow.com/questions/8963219
复制相似问题