2

我已将 NHibernate 配置为使用 Fluent NNibernate 连接到 PostgreSQL 数据库。

我有一个工作类,它将 ISessionFactory 作为构造函数参数并使用队列中的消息。对于每条消息,工作进程调用 ISessionFactory.OpenSession() 并进行一些数据库处理。

当我添加更多工作进程时,系统的性能保持不变,这很奇怪。经过更多调查后,我意识到所有工作进程都使用单个数据库连接。例如,我将添加 8 个工作进程,但在数据库上我只能看到一个数据库连接。

我的理解是 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 回答