NHibernate только для чтения пул сессий? - PullRequest
2 голосов
/ 14 февраля 2012

Есть ли пробег в пулах сессий NHibernate для операций только для чтения? Если система выполняет много операций чтения и только несколько операций записи, имеет ли смысл создавать пул сеансов, которые повторно используются для чтения данных, и открывать новый сеанс только в том случае, если вам явно необходимо зафиксировать изменения?

Я думаю, чего бы это ни стоило, если вы скажете 1000 запросов в минуту на чтение данных. Если бы эти чтения были недолгими в миллисекундах, пул сеансов (скажем, 3), вероятно, мог бы обрабатывать их все вместо того, чтобы создавать и удалять 1000 сеансов.

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Ваше мышление применимо к соединениям с базой данных, которые уже объединены в пул , вам не нужно делать ничего особенного, оно включено по умолчанию.

NHibernate Session не равен соединению с базой данных.Сессия является реализацией шаблона Unit of Work от NHibernate.Объединение единиц работы может быть опасным, поскольку каждая единица работы удерживает все загруженные объекты (для целей отслеживания изменений), поэтому они не могут быть собраны мусором.Даже если вы очищаете UOW перед возвратом его в пул - нет смысла, потому что создание UOW / ISession дешево, оно не выделяет соединение с базой данных.

Посмотрите на этот ответ , еслиВы хотите оптимизировать потребление памяти с помощью NHibernate.

2 голосов
/ 14 февраля 2012

создание и удаление сеансов очень легки, и соединения обрабатываются пулом соединений. ИМО нет пользы от использования пула сессий. У него есть один недостаток, поскольку он содержит каждый загруженный объект в кэше сеанса, что может привести к утечке памяти и снижению производительности при повторном использовании сеанса.

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