繁体   English   中英

.NET ODBC连接池

[英].NET ODBC Connection Pooling

我打开这样的连接:

Using conn as New OdbcConnection(connectionString)
    conn.Open()
    //do stuff
End Using

如果启用了连接池,则连接不会物理关闭,而是释放到池中并将重新使用。 如果它被禁用,它将被物理关闭。

有没有办法以编程方式了解是否启用了连接池? 以及池中当前打开的已使用和未使用的连接数?

编辑:我需要从程序中获取此信息,我不能在部署程序的每台PC上手动检查它。

MSDN作为对此的深入指导

从数据源管理员配置连接池

[剪断]

或者,您可以在“运行”提示符下启动ODBC数据源管理器。 在任务栏上, 单击“开始”,单击“运行”,然后键入Odbcad32。

用于管理连接池的选项卡位于ODBC 3.5及更高版本的“ODBC数据源管理器”对话框中。 从注册表配置连接池

对于ODBC核心组件版本3.5之前的版本,您需要直接修改注册表以控制连接池CPTimeout值。

池总是由数据服务器软件处理。 重点是在.NET中你不必担心它(例如,这就是你在使用SQL Server时应该总是使用SqlConnection的原因 - 部分原因是它启用了连接池)。

更新

在Vista上,只需在“开始”菜单中键入“ODBC”,它就会找到适合您的应用程序。

从OP澄清后更新

在确定是否在每台计算机上启用了连接池方面,查看MSDN指南,如果您检查注册表值,我会说您最好(请参阅本文以获取有关注册表访问的指示)。

TBH虽然,除非客户端机器真的很糟糕,我甚至可能都不会打扰.. AFAIK它默认启用,并且在客户端机器上打开连接(根据我的经验)从来没有什么大不了的。 批量打开时,它才真正成为一件大事。

看起来你可以只读这个注册表项:

[HKEYLOCALMACHINE] \\ SOFTWARE \\ ODBC \\ ODBCINST.INI \\ SQL Server \\ CPTimeout

(或其某些变体,具体取决于您的操作系统和用户帐户)。 如果值为0,则禁用连接池。 如果它是0以上的任何值,则启用它。

看到:

http://msdn.microsoft.com/en-us/library/ms810829.aspx

我不确定是否获得了开放连接的数量。 只是好奇:为什么你需要知道这个数字?

要确定每个数据库上的打开连接数,请尝试使用此sql - 我是从Internet上的文档中获取的

select  db_name(dbid) , count(*) 'connections count'
  from master..sysprocesses
 where spid > 50 and spid  @@spid
 group by  db_name(dbid)
 order by count(*) desc

spid <= 50由sqlserver使用。 所以上面的sql会告诉你程序使用的连接。

暂无
暂无

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

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