Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 7 ADO连接池在IIS之外_Delphi_Iis_Connection_Pooling - Fatal编程技术网

Delphi 7 ADO连接池在IIS之外

Delphi 7 ADO连接池在IIS之外,delphi,iis,connection,pooling,Delphi,Iis,Connection,Pooling,我们有一个Delphi7应用程序,在IIS6中作为ISAPI扩展运行。代码使用ADO连接到MS SQL 2000数据库,并对数据库执行多次读取(无写入)。如果我在SQL profiler中查看审核登录和注销事件,我可以看到对应用程序的大量请求只会导致一个审核登录事件。但是,如果我从IIS外部运行相同的代码(即,在dll中调用相同方法的测试应用程序),我会看到许多登录和注销事件。我猜IIS正在执行一些自动连接池,而我什么也不做。出于性能原因,当我从IIS外部运行dll时,我希望看到相同的行为-在这

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

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

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


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

根据给出的信息很难说,但连接池肯定是基于连接字符串的-如果连接字符串完全相同,那么连接可以被池化。。。听起来您的外部应用程序可能正在更改连接字符串


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

Dll只在IIS外部加载一次(我有一些静态代码验证这一点)。但是连接字符串没有更改-两种情况下运行的代码相同。如果打开的连接总数降至0,则池基本上被清除。可能是ISAPI dll始终保持连接打开,而不是您的独立可执行文件?