我正在一个小项目中测试流利的nhibernate。我有近10个类,当我调用BuildSessionFactory方法时,我得到一个约4500ms的慢响应(对于运行在大约40ms的项目而言太多)
我已经确定NHibernate程序集中最长的方法调用是Configuration.AddDocument(xxx)。
我没有设置use_reflection_optimizer
所以我认为问题出在我的配置中(我希望)。
这就是我得到的......
2009-11-02 17:32:04,171 [7] INFO NHibernate.Cfg.Environment - NHibernate 2.1.1.4000(2.1.1.4000)
2009-11-02 17:32:04,456 [7] INFO NHibernate.Cfg.Environment - 字节码提供商名称:lcg
2009-11-02 17:32:05,234 [7] INFO NHibernate.Dialect.Dialect - 使用 方言:NHibernate.Dialect.MsSql2008Dialect
2009-11-02 17:32:07,240 [7] INFO NHibernate.Cfg.XmlHbmBinding.Binder - 映射类:ImpelSystems.Model.GestioneInterruzioni.FuoriServizio - > FuoriServizio
2009-11-02 17:32:07,304 [7] INFO NHibernate.Dialect.Dialect - 使用 方言:NHibernate.Dialect.MsSql2008Dialect
2009-11-02 17:32:07,306 [7] INFO NHibernate.Cfg.XmlHbmBinding.Binder - 映射类: ImpelSystems.Model.GestioneInterruzioni.RegistroUtenti - > RegistroUtenti
因此可以在启动时使用大约一秒钟......但是第一个类在2秒内映射。我只是想搜索为什么......
答案 0 :(得分:1)
构建会话工厂可能会优化1或2秒,但不能将NHibernate用于必须启动几分之一秒的应用程序。 大多数使用NHibernate的应用程序都作为web应用程序或服务运行。对于这种类型的应用程序或多或少都没关系,但对于你的应用程序,我担心手工构建sql是唯一能够足够快的东西。
答案 1 :(得分:1)
NHibernate在创建SessionFactory
期间完成了大部分映射工作。通过在启动期间执行映射和查询转换,每次创建Session
时都不会支付成本。这就是为什么使用NHibernate时的建议是每个应用程序生命周期只创建一次SessionFactory
。
正如@Paco所提到的,如果你需要非常快速的启动,NHibernate可能不是这个应用程序的最佳选择。