Мы используем NHibernate для управления нашей настойчивостью в сложном модульном приложении для форм Windows, но одна мысль меня беспокоит. В настоящий момент мы открываем сеанс по запуску и открываем все объекты через этот сеанс. Меня беспокоит, что все загруженные объекты загружаются в кеш сеанса NHibernate, поэтому они не могут быть собраны в мусор, и в конечном итоге мы получим всю базу данных в памяти.Как управлять сеансами NHibernate в долговременном приложении Windows Form?
Это никогда не происходит с веб-приложениями, потому что запросы веб-страниц (и даже лучшие запросы Ajax) представляют собой идеальную короткую транзакцию, поэтому сеанс может быть открыт и закрыт для обработки каждого запроса.
Однако, если я загружаю дерево объектов в мое приложение форм и помещаю его в навигационную панель на экране, они могут оставаться на всю жизнь приложения - и в любой момент пользователь может щелкнуть по ним, в результате чего наш код, необходимый для навигации по объектным отношениям с другими объектами (который работает только в сеансе NHibernate).
Что читают читатели StackOverflow, чтобы сохранить преимущества NHibernate без проблем, которые я описываю?
Вот статья с хорошим примером того, как реализовать сеанс для разговора в приложении для рабочего стола: http://msdn.microsoft.com/en-us/magazine/ee819139.aspx – 2010-07-20 23:28:56