0

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

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

提供程序=SQLOLEDB.1;初始目录=%s;数据源=%s;密码=%s;用户 ID=%s;池=True;最小池大小=5;最大池大小=50;连接寿命=120

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

4

1 回答 1

0

根据给定的信息很难说,但是连接池绝对是基于连接字符串的——如果连接字符串完全相同,那么连接可以被池化......听起来你的外部应用程序可能正在改变连接细绳?

IIS 没有池化 ADO 连接。不过,它可能会缓存 ISAPI dll。您是否连续启动/停止您的外部应用程序?还是一次运行导致多个登录事件?

于 2009-04-10T17:06:28.090 回答