我们正在使用NHibernate来管理复杂的模块化Windows窗体应用程序中的持久性 - 但是一个想法一直困扰着我.我们目前在启动时打开一个会话,并通过该会话打开所有对象.我担心所有加载的对象都被加载到NHibernate会话缓存中,因此它们不能被垃圾收集,最终我们最终将整个数据库放在内存中.
Web应用程序永远不会发生这种情况,因为网页请求(甚至更好的Ajax请求)代表了完美的短期事务,因此可以打开和关闭会话来处理每个请求.
但是,如果我在表单应用程序中加载一个对象树然后放入屏幕上的导航窗格,它们可能会在应用程序的生命周期内保留它们 - 并且在任何时候用户都可以单击它们,导致我们的代码需要将对象关系导航到其他对象(仅在NHibernate会话中工作).
StackOverflow读者如何在没有我描述的问题的情况下保持NHibernate的好处?