Мы используем NHibernate для управления нашим постоянством в сложном модульном приложении оконных форм - но одна мысль продолжает беспокоить меня. В настоящее время мы открываем сессию при запуске и открываем все объекты через эту сессию. Я обеспокоен тем, что все загруженные объекты загружаются в кэш сеанса NHibernate, так что они не могут быть собраны мусором, и в конечном итоге мы получим всю базу данных в памяти.
Этого никогда не происходит с веб-приложениями, потому что запросы веб-страниц (и даже более эффективные запросы Ajax) представляют собой идеальную недолговечную транзакцию, поэтому сеанс можно открывать и закрывать для обработки каждого запроса.
Однако, если я загружаю дерево объектов в свое приложение форм и помещаю их в навигационную панель на экране, они могут остаться на всю жизнь приложения - и в любой момент пользователь может щелкнуть по ним, что приведет к нашему код, необходимый для навигации по объектным отношениям с другими объектами (который работает только в рамках сеанса NHibernate).
Что читатели StackOverflow делают, чтобы сохранить преимущества NHibernate без описанных мной проблем?