2009-04-09 10 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接続プーリング

EDIT - 実際にはSQLのOLEプロバイダを使用しています。接続文字列は次のようになります。

プロバイダー= SQLOLEDB.1;初期カタログ=%s;データソース=%s;ユーザーID =%s;プール= True;最小プールサイズ= 5;最大プールサイズ= 50;接続ライフタイム= 120

Pooling = True属性を追加しようとしましたが、これは変更されません。また、接続プーリングで監査ログインとログアウトイベントが必ずしも変更されないため、Logins/sec、Logouts/secおよびUser Connectionsパフォーマンスカウンタ(SQLServer:GeneralStatistics)を使用して接続プーリングが行われるかどうかを確認しました。 IIS内部からは、毎秒多くのログインと秒/秒のログアウトはありません。 IISの外では、毎秒多くのログインとログアウトが発生し、ユーザー接続は変動します(IISでは安定しています)。

答えて

0

情報に基づいて言うのは難しいですが、接続プールは接続文字列に基づいています。接続文字列がまったく同じであれば、接続をプールすることができます。接続文字列を変更する必要がありますか?

IISがADO接続をプールしていません。しかし、ISAPI dllをキャッシュしている可能性があります。あなたは外部のアプリケーションを継続的に開始/停止していますか?それとも、複数のログインイベントを引き起こす1回の実行ですか?

+0

DllはIISの外で1回だけロードされます(これを確認するスタティックコードがいくつかあります)。ただし、接続文字列は変更されません。両方の状況で同じコードが実行されています。 –

+1

開いている接続の総数が0になると、プールは基本的にクリアされます。 ISAPI dllは、スタンドアロンの実行可能ファイルとの接続を常に開いたままにすることができますか? –

関連する問題