繁体   English   中英

在Autofac中将NHibernate ISession注册为SingleInstance

[英]Registering NHibernate ISession as SingleInstance in Autofac

在很少重启的Windows服务中创建NHibernate.ISession实现的一个实例是否有害? 我对ISession不太了解,但是据我了解,ISession实现的实例保留了对事务的引用,这些事务可以在我提交更改后立即销毁

using (ITransaction trans = MyISession.BeginTransaction())
{
 ...
trans.Commit();
}

当我在线检查代码示例时,几乎总是使用autofac实现ISession设置为InstancePerLifetimeScope()。 这实际上意味着该实例将从其创建时所在的上下文中退出(例如HTTP request)。

有人可以启发我在长时间运行的Windows进程中在autofac中将nhibernate注册为单个实例的危害(如果有)吗?

builder.Register(c => new MyIsessionFactory.OpenSession()).As<ISession>().SingleInstance();

会话跟踪其已加载甚至引用的所有实体和集合。

在应用的整个生命周期中保持会话打开状态会导致:

  • 极高的内存使用率
  • 极慢的操作(扫描加载的实体的列表(许多操作会自动完成),如果加载的实体太多,则会花费很长时间)
  • 无法从错误中恢复,因为在存在一个会话状态时会话状态将被破坏

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM