2009-11-02 62 views
1

我在一個小項目中測試fluent-nhibernate。我有近10個類,當我調用BuildSessionFactory方法時,我得到一個約4500ms的慢響應(對於在大約40ms運行的項目太多)NHibernate Configuration.AddDocument緩慢

我已經確定最長的方法調用是Configuration.AddDocument(xxx)在NHibernate程序集中。我不設置use_reflection_optimizer所以我想這個問題是在我的配置(我希望)。


這是我得到的..

2009-11-02 17:32:04171 [7] INFO NHibernate.Cfg.Environment - 的NHibernate 2.1.1.4000(2.1.1.4000)

2009-11-02 17:32:04456 [7] INFO NHibernate.Cfg.Environment - 字節碼提供商名稱:LCG

2009-11-02 17:32:05234 [7] INFO NHibernate.Dialect。方言 - 使用 方言:NHibernate.Dialect.MsSql2008Dialect

2009-11-02 17:32:07240 [7] INFO NHibernate.Cfg.XmlHbmBinding.Binder - 映射類:ImpelSystems.Model.GestioneInterruzioni.FuoriServizio - > FuoriServizio

2009-11-02 17:32:07304 [7] INFO NHibernate.Dialect.Dialect - 使用 方言:NHibernate.Dialect.MsSql2008Dialect

2009-11-02 17:32:07306 [7] INFO NHibernate.Cfg.XmlHbmBinding.Binder - Mapping類: ImpelSystems.Model.GestioneInterruzioni.RegistroUtenti - > RegistroUtenti

因此,對於啓動大約有一秒就可以了......但是第一個類在2秒內被映射。我只是想搜索爲什麼......

回答

1

構建會話工廠可能會優化1或2秒,但不能將NHibernate用於必須啓動幾分之一秒的應用程序。大多數使用NHibernate的應用程序都以Web應用程序或服務的形式運行。對於這種應用程序,幾秒鐘或多或少無所謂,但對於您的應用程序,恐怕手動構建sql是唯一足夠快的事情。

1

在創建SessionFactory期間,NHibernate完成了很多映射工作。通過在啓動過程中進行映射和查詢翻譯,每次創建Session時都不會支付成本。這就是爲什麼使用NHibernate的建議是在每個應用程序生命週期中僅創建SessionFactory一次。

正如@Paco提到的,如果你需要非常快速的啓動,NHibernate可能不是這個應用程序的最佳選擇。