处理oledbconnections的最佳方法

时间:2012-01-22 17:54:52

标签: c# asp.net optimization oledb

我通过搜索堆栈溢出和其他网站来了解单例是一种糟糕的编程习惯。 我非常依赖OleDbConnection来连接到SqlServer,我的页面可以实例化20倍以上的连接。我想用一个单例来替换它,以避免在已经打开连接时打开连接。

我的问题是: Singleton在我的情况下是不是很糟糕? 在sql server 2008上实现多个连接的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

Singleton不是您的正确选择,因为建议您在完成数据库事务后立即关闭连接。即使您经常需要数据库连接,也应该在需要时关闭连接并关闭它尽快。

除此之外,Singleton根本不是一个糟糕的编程习惯。 Singleton是编程中广泛使用的模式。没有模式是糟糕的编程习惯。只是你应该在他们适合的场景中使用它们并且完全有意义。如果您将在不适当的场景中使用模式,这将是一个糟糕的编程实践。

修改

为了清楚起见,在我看来,经验法则应该是你不应该为将来的运营保持联系。如果有一些待处理的事务,显然最好使用相同的连接来执行所有事务。但是,你不应该继续保持联系,以便将来可能需要做的事情

答案 1 :(得分:1)

你所描述的与单身人士无关......单身人士本身既不坏也不好 - 只有当因为错误的原因而被使用时才是坏事(如同所有事情)。

关于您的连接问题:

这种情况通常通过连接池解决/处理......

您可以自己实现(不推荐)...根据您使用的ADO.NET提供程序,它可能已经附带一个经过良好实施且经过良好测试的连接池(例如来自Devart的连接池 - 不是附属的,只是一个快乐的顾客)...

连接池为数据库连接提供了一种缓存...当你需要一个缓存从池中获取它时,当你完成后将它返回到池中...池保持连接(在一些可配置的时间内)自上次使用以来的时间段或类似情况)...由于池中的连接已经创建并打开,因此您可以获得显着的速度优势......

OTOH如果您使用的连接使用不同的登录和/或连接设置,您无法真正从连接池中获利......

<强>更新

OleDB附带内置连接池机制 - 有关详细信息,请参阅MSDN。根据MSDN,它默认启用...在关闭/处理连接时,它将自动返回到池...这反过来意味着您可能已经在使用池化机制(假设您正在使用OleDB的默认设置。