Вам нужна стратегия управления сеансом, которая позволяет вашему приложению эффективно функционировать и использовать преимущества NHibernate, в частности кеширование и отложенную загрузку.
Создание сеансов - недорогой процесс и требует небольшого количества предварительной оперативной памяти или процессора, поэтому вам не следует беспокоиться о сохранении или повторном использовании сеансов (действительно, их повторное использование может привести к неприятным и непредвиденным побочным эффектам). Фабрика сеансов - дорогостоящая вещь, и ее следует создавать один и только один раз при запуске приложения.
Эмпирическое правило таково: время жизни сеанса должно быть достаточно длинным, чтобы у вас не было постоянных объектов, оставшихся в области видимости после завершения сеанса.
После завершения сеанса все отслеживание изменений для объектов, которые вы получили из этого сеанса, прекращается, поэтому эти изменения не сохраняются, если вы не намеренно повторно присоедините этот объект к новому сеансу. Таким образом, сеанс должен существовать до тех пор, пока будут существовать извлеченные из него объекты. В веб-приложении это обычно означает сеанс для каждого запроса; в WinForms - сеанс для каждой формы.
В вашем случае со службой (я предполагаю, что она работает как служба Windows), выполняющей работу NHibernate, вы можете рассмотреть возможность создания сеанса для каждого нового запроса от потребляющего настольного приложения и удаления это когда этот запрос был обслужен. Не зная точно, как работает ваша служба и какой механизм использует настольное приложение для взаимодействия с ней (удаленное взаимодействие? WCF? Обычный старый SOAP?), Я не могу быть более конкретным.
(Есть некоторые исключения из этого общего правила - предположим, что у вас есть набор постоянных объектов, которые представляют собой общий ресурс, на который будет ссылаться другой код, но не измениться, вы можете загрузить их заранее при запуске приложения и оставить их отключенными оттуда. на.)
Если вы обнаружите, что производительность при такой стратегии низкая, возможно, вы слишком много общаетесь с базой данных и ваш граф объектов сложен; в этом случае посмотрите на кэширование второго уровня.
person
Neil Hewitt
schedule
06.01.2010