Как закрыть соединение NHibernate? - PullRequest
3 голосов
/ 26 августа 2009

Я сделал сайт, используя ASP.NET MVC, NHibernate и MySQL. В моем проекте у меня есть несколько классов репозиториев, каждый с методами, использующими такие коды:

using(ISession session = NHibernateHelper.OpenSession()) {
    using(ITransaction transaction = session.BeginTransaction()) {
        session.Save(cidade);
        transaction.Commit();
    }
}

Я пришел из Classic ASP, поэтому я уверен, что соединение с MySQL действительно закрыто. На самом деле, я уверен, что есть подключение, как на Classic ASP.

Должен ли я сделать что-то, чтобы явно закрыть соединение / сеанс, или это «автозаполнение»?

Есть ли способ сделать, если на моем сервере много открытых соединений?

Большое спасибо.

1 Ответ

5 голосов
/ 26 августа 2009

Сеанс делает управление соединением очень эффективным способом, поэтому вам не нужно ничего делать вручную, если вы не забыли утилизировать сеанс (как вы делаете). Соединение не открыто в течение всего времени жизни сеанса, но только когда это необходимо. Не будет больше открытых соединений с базой данных, чем количество соединений в пуле соединений, которое по умолчанию равно 100. 100 подключений не будут ко многим практически в каждом сценарии, поэтому вам не нужно ничего делать, когда открыто много подключений. На очень загруженном веб-сайте вы даже не будете использовать все 100 соединений, это будет что-то вроде 20-40 открытых соединений из-за размера пула потоков для веб-запросов.

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