nhibernate - NHibernate session 可以/应该保持打开多长时间?

标签 nhibernate session windows-services

我创建了一个正在监听 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/

相关文章:

nhibernate - FluentNhibernate 未使用 SQL CE 4.0 创建 Id 列作为身份

wcf - 带有 Web 应用程序的 Oracle Instant Client

.net - NHibernate:一个 session 中的更新不会反射(reflect)在另一个打开的 session 中

nhibernate - 在 NHibernate 3 中使用 Linq 时急切加载

java - hibernate 错误 "database is locked"。我如何正确关闭 session ?

session - 用twig显示 session 参数

mysql - mysql存储session的相关问题

node.js - 将应用程序作为 Windows 服务运行时的命令行输出

c# - 在 Windows 服务 C# 中引发自定义类事件

c# - ConfigurationManager.RefreshSection 在 c# windows 服务中不起作用