Пул соединений NHibernate - PullRequest
3 голосов
/ 14 июля 2011

Я рассматриваю возможность использования Fluent NHibernate для нового приложения с SQL Server 2008, и у меня возникают проблемы с пониманием поведения обработки подключений, которое я вижу.

Я отслеживаю соединения, используя sp_who2, и вот что я вижу:

  1. При создании SessionFactory открывается одно соединение. Это соединение Кажется, остается открытым, пока приложение не будет убито.

  2. Соединение не открывается при открытии нового сеанса. (Это нормально, я понимаю, что NHibernate ждет до последнего момента для создания соединений с базой данных).

  3. Новое соединение не открывается, даже когда я запускаю запрос через NHibernate. Я должен предположить, что он использует соединение, созданное при создании SessionFactory, которое все еще открыто. Я установил точку останова после запроса (до закрытия сеанса), и в sp_who новых сеансов не появилось.

Запуск всего приложения через одно соединение недопустим (очевидно). Как я могу убедиться, что каждая ISession получает свое собственное соединение? Я уверен, что здесь что-то очевидно, что мне не хватает ...

Заранее спасибо.

1 Ответ

6 голосов
/ 14 июля 2011

Поведение, которое вы видите, не является специфичным для NHibernate - пул соединений является поведением по умолчанию в SQL Server.
Даже если на первый взгляд это может показаться неудобным, на самом деле это хорошая вещь, поскольку создание новых соединений и их обслуживание обходятся дорого.
(для получения дополнительной информации см. Статью Википедии о пуле соединений )

Поэтому нет необходимости пытаться заставить NH открывать новое соединение для каждого сеанса, поскольку повторное использованиесуществующие соединения фактически улучшают производительность SQL Server.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...