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