NHibernate Configuration.AddDocument很慢

时间:2009-11-02 14:59:19

标签: nhibernate configuration performance

我正在一个小项目中测试流利的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秒内映射。我只是想搜索为什么......

2 个答案:

答案 0 :(得分:1)

构建会话工厂可能会优化1或2秒,但不能将NHibernate用于必须启动几分之一秒的应用程序。 大多数使用NHibernate的应用程序都作为web应用程序或服务运行。对于这种类型的应用程序或多或少都没关系,但对于你的应用程序,我担心手工构建sql是唯一能够足够快的东西。

答案 1 :(得分:1)

NHibernate在创建SessionFactory期间完成了大部分映射工作。通过在启动期间执行映射和查询转换,每次创建Session时都不会支付成本。这就是为什么使用NHibernate时的建议是每个应用程序生命周期只创建一次SessionFactory

正如@Paco所提到的,如果你需要非常快速的启动,NHibernate可能不是这个应用程序的最佳选择。