繁体   English   中英

C# Microsoft Access 连接池

[英]C# Microsoft Access Connection Pooling

简介:使用 VS 2013,.Net 4 创建一个库来连接/使用我们的父产品使用的 Microsoft Access 数据库(第 3 方应用程序的一部分 - 数据库的选择不是一个选项)。

共用的原因:位于整个工业设施中的多台平板电脑正在建立连接。 对性能的担忧。

我需要在连接字符串中添加什么,如何初始化它? 我什么时候以及如何杀死它?

有没有人处理过这个?

原因:到目前为止我找到的答案含糊不清

对于System.Data.OleDb连接,您显然不需要执行任何操作即可启用连接池。 根据MSDN文章OLE DB,ODBC和Oracle连接池(ADO.NET)

OleDb的连接池

OLE DB的.NET Framework数据提供程序使用OLE DB会话缓冲池自动缓冲连接。

对于使用System.Data.Odbc的应用程序,您需要通过双击ODBC Administrator控制面板(odbcad32)的“连接池”选项卡上的“ Microsoft Access驱动程序...”名称来启用Access ODBC驱动程序的连接池。 exe),然后选择“与此驱动程序的池连接”

ConnectionPooling.png

正如对类似早期问题( 如此问题)的回答和评论中所述,尚不清楚连接池是否将为使用Access数据库的应用程序带来重大好处,但受支持(参考: 此处 ,项目#3)并且它似乎根据perfmon.exe为“ ODBC连接池”计数器显示的内容工作。

只是让它在某个地方可用以帮助人们(并扩展@Gord Thompson 提供的信息),并且由于文档似乎充其量具有误导性......

在我的经验和环境中,Access MDB 和 OLEDB + Jet 4.0 默认情况下没有打开连接池,除非您打开它,否则它实际上是关闭的。 我很确定 ACE 驱动程序也是如此,但我最近没有像对 Jet 那样进行测试。

与 ODBC(据我所知)不同,您可以使用 OLEDB 在连接字符串中打开连接池。 在您的连接字符串中,添加以下命令以打开池(同样,此默认值适用于 Access,而其他数据库可能并非如此): OLE DB Services = -1;

以下是可用的不同值及其作用的链接https://learn.microsoft.com/en-us/cpp/data/oledb/overriding-provider-service-defaults?view=msvc-170

备份链接以防 MS 执行 MS 执行的操作并终止文档链接https://www.ibm.com/docs/en/db2/11.1?topic=tips-connection-pooling

连接池对 Access 有帮助吗? 简短的回答,是的,它确实如此。 要查看差异,通过编写打开连接、执行查询、然后关闭连接并保留“OLE DB SERVICES”命令的循环来残酷化 Access,放入秒表,以便您可以计时并将其全部包装在适当的USING语句。 您会看到打开/关闭的开销很大,您也很可能会看到 Access 开始因该开销而阻塞,有时会抛出如下错误:

数据库已由用户“Admin”放置在计算机“DESKTOP-XXXXXXX”上,以防止其被打开或锁定。

它还会导致连接到数据库的其他应用程序偶尔因相同的错误而窒息。

现在打开连接字符串中的池,您将看到性能的巨大提升,偶尔的错误将消失 go。

但这并非没有缺点。 Access 和 OLEDB 有一个问题,如果一个连接写入数据,它可能在长达 5 秒内对其他连接不可用,或者在某些情况下甚至更长,这不仅是因为读取缓冲区,而且是 Jet 内置的异步写入磁盘进程在另一个线程上运行。

在使用 OLEDB 的许多情况下,当您打开/关闭连接和查询数据时,从另一个连接写入的数据可用得更快,因为我相信连接打开过程会从一个新的读取缓冲区开始。 连接池在这种情况下完全符合您的预期,并且由于连接实际上已经打开,您正在处理现有的连接缓冲区而不是开始清理并且可能需要等待长达 5 秒(或更长时间)才能由另一个连接写入数据可用。

在同一个应用程序和池中打开,这可能不是问题,因为最终,他们很可能(但可能不保证)使用相同的连接---但如果你有不同的应用程序(或相同的不同机器上的应用程序)需要数据,你遇到了问题。

因此 - 根据您的环境和需求,连接池可能是一种资产,也可能是一种负担。

我在这里发布了一些关于缓冲区的附加信息以及绕过它的方法https://stackoverflow.com/a/74627552/2336839

暂无
暂无

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

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