.NET ODBC连接池
我打开这样的连接:
Using conn as New OdbcConnection(connectionString) conn.Open() //do stuff End Using
如果启用了连接池,则该连接不会被物理关闭,而是释放到池中,并将被重用。如果禁用,它将被物理关闭。
是否可以通过编程方式知道是否启用了连接池?池中当前打开的已使用和未使用的连接数?
编辑:我需要从程序中获取此信息,我无法在将要部署该程序的每台PC上手动进行检查。
解决方案
MSDN作为对此的深入指导
Configuring Connection Pooling from the Data Source Administrator [snip] Alternatively, you can start the ODBC Data Source Administrator at the Run prompt. On the taskbar, click Start, click Run, and then type Odbcad32. The tab for managing connection pooling is found in the ODBC Data Source Administrator dialog box in version ODBC 3.5 and later. Configuring Connection Pooling from the Registry For versions prior to version 3.5 of the ODBC core components, you need to modify the registry directly to control the connection pooling CPTimeout value.
池化始终由数据服务器软件处理。整个问题是,在.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
Spids <= 50由sqlserver使用。因此,上面的sql会告诉我们程序所使用的连接。