NHibernate会话可以/应该保持多久?

时间:2009-08-07 09:31:33

标签: nhibernate session windows-services

我创建了一个正在收听MSMQ的Windows服务。对于我收到的每条消息,都需要进行一些数据库事务。稍后可能每秒会有1条消息。 目前,Nhib会话保持打开状态,直到手动停止服务。 这是一个好习惯,还是应该在每条消息后关闭会话?

提前致谢

2 个答案:

答案 0 :(得分:4)

NHibernate会话意味着相对较短,因此将其保持活动一段时间通常不是一个好主意。会话缓存实体,如果不以某种方式管理缓存,则在获取更多实体时会缓存更多数据。这会导致性能下降。

NHibernate文档描述了这样的ISession:

  

单线程,短期对象,表示应用程序与持久性存储之间的对话。包装ADO.NET连接。 ITransaction的工厂。保存持久对象的强制(第一级)缓存,在导航对象图或按标识符查找对象时使用。

我建议使用每个会话进行一次会话,即如果你有一些“属于一起”的数据库操作,则对这些操作使用相同的会话,但是当这些操作完成后,你关闭会话。

因此,为您处理的每条消息使用新会话听起来都是个好主意。

答案 1 :(得分:0)

与线程安全的会话工厂(ISessionFactory)相比,您应该在每次数据库事务时打开和关闭会话(ISession)。

相关问题