vb.net – 为什么不推荐使用一个公共OleDbConnection?替代解决错误:打开了太多连接

前端之家收集整理的这篇文章主要介绍了vb.net – 为什么不推荐使用一个公共OleDbConnection?替代解决错误:打开了太多连接前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须使用另一个开发人员制作的项目.一个带有Visual-Basic代码的Win-Form项目,MS-Access为db和一些OleDbConnections.有一个错误:有时应用程序无法打开OleDbConnection,因为已在db上达到最大连接数.我知道使用连接的最佳方法是:
Using cn As New OleDbConnction(s)
  ...
  cn.Close()
End Using

但是在项目中有许多类可以使用db,在许多这些类中,OleDbConnections具有“Friend”可见性,可以在不同的时间打开和关闭.因此,将所有OleDbConnections放入Using构造中是不可能的,并且很难找到哪些操作“忘记​​”关闭其中一个OleDbConnection.

一个可能的解决方案可能是只使用一个唯一的公共OleDbConnection,并在打开之前检查它是否尚未打开.
但有人告诉我这是一个非常糟糕的做法.我想他告诉我有关表演的事情,但我完全不知道.
你能告诉我为什么一个独特的公共OleDbConnection被弃用了吗?
对我来说,对于我的问题,你有一个“简单”的解决方案吗?
谢谢,
Pileggi

从您的描述中,我看到了一些可能导致您的问题的可能问题:

>嵌套连接:
您在彼此之间打开多个连接
>打开/释放连接太快:
正如David-W-Fenton所提到的那样,每次打开/关闭单个连接时,都会创建/删除锁定文件.此操作非常慢,如果您在应用程序中快速打开/关闭数据库(执行大量原子查询),您可能会遇到此问题.

一些可能的方法来调查和解决问题:

跟踪所有打开/关闭呼叫
添加一些每次打开和关闭连接时显示的调试跟踪.
它将允许您检测嵌套连接以及您的连接池被浪费的位置.

强制连接轮询
一个简单的“修复”可能是在连接字符串中明确设置连接池.它应该是默认行为,所以它可能无法解决您的问题,但它很简单,没有理由不尝试它:

OLE DB Services=-1

使用连接管理器类为您创建/释放连接.
用您自己的代码替换新OleDbConnection的所有显式创建和关闭操作.
这将允许您始终在整个应用程序中重复使用单个现有连接,并允许您通过将行为集中在一个位置来快速调整整个应用程序.

那么为什么持有单一连接通常会被弃用?

>通常,您不应该在整个应用程序中保持连接打开,因为它们会强制数据库服务器为您保留可用资源,并且会减少可以连接的客户端数量(总是有可用的连接数量有限).
对于Access而言-a基于文件数据库没有服务器部分保持单个连接打开实际上是优选的,因为与打开新连接(创建锁定文件)相关的延迟.由于Access并不意味着与大量并发用户一起使用,因此保持连接打开的资源成本不足以成为问题.
From simple tests,可以证明保持连接始终打开允许后续连接打开大约快10倍!> OleDb驱动程序为您执行连接池,因此可以在释放连接时重新使用连接.>通过保持连接和数据库操作的小型化和包含,您在使用线程时不太可能遇到并发问题.如果使用相同的管道向数据库执行多个操作,则保持全局连接可能会成为问题.

猜你在找的VB相关文章