2009-04-09 80 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