2

PostgreSQL データベースに接続する Fluent NNibernate で NHibernate を構成しました。

ISessionFactory をコンストラクター パラメーターとして受け取り、キューからメッセージを消費するワーカー クラスがあります。メッセージごとに、ワーカー プロセスは ISessionFactory.OpenSession() を呼び出し、いくつかのデータベース処理を行います。

ワーカー プロセスを追加しても、システムのパフォーマンスは変わりません。さらに調査した結果、すべてのワーカー プロセスが単一のデータベース接続を使用していることに気付きました。たとえば、8 つのワーカー プロセスを追加しますが、データベースでは 1 つのデータベース接続しか確認できません。

私の理解では、接続プールがいっぱいでない限り、ISessionFactory.OpenSession() は新しいデータベース接続を開きます。

私の理解が間違っているのでしょうか、それとも Postgres NHibernate ドライバーに問題があるのでしょうか。

4

2 に答える 2

3

OpenSession は、必要になるまでデータベース接続を開かず、できるだけ早く接続を閉じます (つまり、接続を解放してプールに戻します)。

于 2011-05-31T21:27:01.147 に答える
3

デフォルトでは、セッションはトランザクションの存続期間中接続を開いたままにし、Diego が言ったように、必要な場合にのみ接続を開きます。

独自の接続を管理したい場合は、呼び出すことができます

ISessionFactory.OpenSession(myConnection);
于 2011-05-31T21:42:46.700 に答える