2009-04-10 13 views
0

Delphi 7アプリケーションでプーリングを有効にするには何が必要ですか?私の接続文字列は次のとおりです。Delphi 7アプリケーションでOLEDBリソースプーリングを有効にする方法

プロバイダ= SQLOLEDB.1;初期カタログ=%sの;データソース=%sの;パスワード=%sの;ユーザID =%sの; OLE DBサービス= -1は

私ができますSQLServer:GeneralStatistics UserConnectionsパフォーマンスカウンタを見て、接続プーリングが達成されていないことを伝えてください。アプリケーションが実行されると、これは大きく変動します。接続プーリングでは、安定した状態を達成することが期待されます。また、Logins/secとLogouts/secカウンタが両方とも非常に高いことがわかります。接続プーリングが使用されている場合、Logouts/secはゼロまたはほぼゼロになります。私は、リソースプーリングこの記事見つかっ検索で

:それはあなたがOLEDB SDK(またはCOM)で作業している場合」ことを示唆している

http://www.ddj.com/database/184416942

は、ATLを使用して、レベル、あなたはいくつかのより多くのコードを記述する必要があります"(接続文字列にOLE Db Services = -1を追加する以外は)接続プールを取得するには

CDataSource db; CDBPropSet dbinit(DBPROPSET_DBINIT);

dbinit.AddProperty(DBPROP_AUTH_USERID、 "MyName); dbinit.AddProperty(DBPROP_INIT_DATASOURCE、" MyServer); dbinit.AddProperty(DBPROP_INIT_CATALOG、「MYDB); dbinit.AddProperty(DBPROP_INIT_PROMPT、(短い)4); dbinit.AddProperty(DBPROP_INIT_LCID、(長い)1033); dbinit.AddProperty(DBPROP_INIT_OLEDBSERVICES、(長い)DBPROPVAL_OS_ENABLEALL)。 HRESULT時間= db.OpenWithServiceComponents(_T(「SQLOLEDB」)、&のdbinit);

残念ながら、そのコードは私にはギリシャ語であると私は、Delphi(またはその必要さえあれば)にそれを変換するかどうかはわかりません。

接続文字列をまったく変更しないように注意してください。リソースプーリングを有効にするために他に何が必要なのでしょうか?

答えて

0

接続の1つのインスタンスを常に開いたままにする必要があります。ゼロになると、ADOは接続を再確立してユーザーを認証します。

+0

しかし、実際にサーバーへの接続を閉じずにコードを開いたり閉じたりする接続プーリングの機能はありませんか?私がIISで同じコードを実行すると、アプリケーションの存続期間が最後であるDbサーバーへの2つの接続が作成されます。 –

+0

これは、既存の最近アクティブな接続の再利用によるものです。カウントが0になったとします...あなたはプールがデータベースへの接続を開いたままにしておくべきと思いますか?ゼロで、私はそれがクリーンアップを開始し、最終的にすべての接続を終了すると信じています。私は正確な時間枠をテストしていない。 –

+0

Darianに感謝します。IISがいくつかの接続を開いている理由を説明します。私は答えとしてマークし、テストがそうでないことを証明するならば編集します。 –

0

あなたはそれを言及していませんが、データアクセスにはDelphiのADO実装(dbGo for Delphi 7、IIRC)を使用していますか?もしそうなら、同じTADOConnectionを通してすべてを接続していますか?その場合は、アプリケーションのプーリングを実行する必要があります(アプリケーションの実行中のコピーがDBサーバーへの接続を1つ使用していることを意味します)。

+0

はい私はDelphi 7でdbGoを使用しています。同じ接続はコード全体で共有されていません。 –

関連する問題