21

15分ごとにPostgresデータベースのテーブルをチェックする必要があるC#クライアントアプリケーションがあります。問題は、このクライアントを多かれ少なかれ200のクライアントにインストールする必要があることです。そのため、クエリの後でDB接続を閉じる必要があります。

.Close()メソッドを使用していますが、Postgres DBのpg_stat_activityテーブルを確認すると、IDLEステータスで接続がまだ開いていることがわかります。どうすればその問題を修正できますか?接続を確実に閉じることは可能ですか?

ありがとう、アンドレア

4

1 に答える 1

29

ほとんどのADO.NETプロバイダーと同様に、Npgsqlはデフォルトで接続プールを使用します。オブジェクトを作成Close()するNpgsqlConnectionと、Npgsqlが使用する実際の基になる接続を表す内部オブジェクトがプールに入れられて再利用されるため、別の接続を不必要に作成するオーバーヘッドが節約されます。(詳細については、「接続を開く」とは実際にはどういう意味ですか?を参照してください)。

これは、1秒以内に接続を数回使用するのが一般的であるため、ほとんどのアプリケーションに適しています。

まったく適していませんがPooling=false、接続文字列にオプションを含めると、このデフォルトが上書きされClose()、実際の接続が閉じられます。

于 2012-01-27T12:44:51.063 に答える