繁体   English   中英

处理oledbconnections的最佳方法

[英]best way to handle oledbconnections

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

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

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

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

编辑

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

你所描述的与Singleton无关......单身本身既不坏也不好 - 只有在错误的原因使用它时才是坏事(就像一切一样)。

至于你的连接问题:

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

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

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

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

更新:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM