NHibernate ISessionFactory.OpenSession () не открывает соединение с базой данных - PullRequest
2 голосов
/ 01 июня 2011

У меня настроен NHibernate с подключением Fluent NNibernate к базе данных PostgreSQL.

У меня есть рабочий класс, который принимает ISessionFactory в качестве параметра конструктора и принимает сообщения из очереди. Для каждого сообщения рабочий процесс вызывает ISessionFactory.OpenSession () и выполняет некоторую обработку базы данных.

Когда я добавляю больше рабочих процессов, производительность системы остается такой же, что странно. После еще одного исследования я понял, что все рабочие процессы используют одно соединение с базой данных. Например, я бы добавил 8 рабочих процессов, но в базе данных я вижу только одно соединение с базой данных.

Насколько я понимаю, ISessionFactory.OpenSession () откроет новое соединение с базой данных, если пул соединений не заполнен.

Так что мое понимание неверно или это проблема с драйвером Postgres NHibernate.

Ответы [ 2 ]

3 голосов
/ 01 июня 2011

По умолчанию сеанс будет поддерживать соединение открытым в течение всего срока транзакции, и, как сказал Диего, он открывает его только при необходимости.

Если вы хотите управлять своими собственными соединениями, вы можете позвонить

ISessionFactory.OpenSession(myConnection);
3 голосов
/ 01 июня 2011

OpenSession не открывает соединение с базой данных до тех пор, пока это необходимо, и закрывает его (т. Е. Выпускает его обратно в пул) как можно скорее.

...