2009-04-09 53 views
0

我们有一个在IIS6中作为ISAPI扩展运行的Delphi 7应用程序。该代码使用ADO连接到MS SQL 2000数据库并对数据库执行多次读取(不写入)。如果我在SQL分析器中看到审计登录和注销事件,我可以看到对应用的许多请求只导致1次审计登录事件。但是,如果我从外部IIS运行相同的代码(即测试应用程序在dll中调用相同的方法),我会看到许多登录和注销事件。我的猜测是,IIS正在执行一些自动连接池,而无需执行任何操作。出于性能方面的原因,当我从IIS之外运行dll时,我希望看到相同的行为 - 在这种情况下,应用程序几乎缓慢100%。当dll在IIS之外运行时,如何获得ADO连接池?Delphi 7在IIS外的ADO连接池

编辑 - 我实际上使用SQL ole提供程序。连接字符串如下所示:

Provider = SQLOLEDB.1; Initial Catalog =%s; Data Source =%s; Password =%s; User ID =%s; Pooling = True; Min Pool Size = 5;最大游泳池大小= 50;连接寿命= 120

我试着添加Pooling = True属性,但这不会改变事情。另外,我了解到审计登录和注销事件不一定会更改连接池,因此我开始使用Logins/sec,Logouts/sec和User Connections性能计数器(SQLServer:GeneralStatistics)来确定是否发生连接池。从IIS内部我看到许多登录/秒和没有注销/秒。在IIS之外,我每秒看到很多登录和注销,并且用户连接有波动(它在IIS中保持稳定)。

回答

0

根据给出的信息很难说,但连接池确实是基于连接字符串 - 如果连接字符串完全相同,那么连接可以合并......听起来像您的外部应用程序可能正在改变连接字符串?

IIS不合并ADO连接。尽管这可能会缓存ISAPI dll。你是否开始/停止外部应用程序?或者它是单次运行导致多个登录事件?

+0

该DLL只在IIS外部加载一次(我有一些静态代码验证了这一点)。连接字符串不会改变 - 在这两种情况下都会运行相同的代码。 – 2009-04-10 18:38:34