我创建了一个正在监听 MSMQ 的 Windows 服务。对于我收到的每条消息,都需要进行一些 DB 事务。稍后可能每秒会有 1 条消息。
当前 Nhib session 保持打开状态,直到手动停止服务。
这是一个好习惯还是我应该在每条消息后关闭 session ?
提前致谢
最佳答案
NHibernate session 的生命周期相对较短,因此将其长时间保持事件状态通常不是一个好主意。 session 缓存实体,如果您不以某种方式管理缓存,则随着获取更多实体,缓存的数据也会更多。这会导致性能下降。
NHibernate 文档这样描述 ISession:
A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps an ADO.NET connection. Factory for ITransaction. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier.
我建议使用 session-per-conversation,即如果你有几个“属于一起”的数据库操作,你对这些操作使用相同的 session ,但是当这些操作完成后,你关闭 session 。
因此,为您处理的每条消息使用一个新 session 听起来是个好主意。
关于nhibernate - NHibernate session 可以/应该保持打开多长时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1243835/