2010-11-01 91 views
0


根據分析器需要24秒爲FluentConfiguration.BuildConfiguration完成。下面是我用得到的代碼配置:流利NHIbernate凍結了很多

MsSqlConfiguration persistenceConfigurer = MsSqlConfiguration 
     .MsSql2005 
     .ConnectionString(connectionStringBuilder => connectionStringBuilder 
                 .Server(server) 
                 .Database(database) 
                 .Username(userName) 
                 .Password(password)) 
     .ProxyFactoryFactory<ProxyFactoryFactory>() 
     .CurrentSessionContext<ThreadStaticSessionContext>() 
     .DoNot.ShowSql(); 

FluentConfiguration cfg = Fluently.Configure() 
    .Database(persistenceConfigurer) 
    .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ExecutorMap>()); 

return cfg.BuildConfiguration(); 

是19.是不是常見的功能NHibernate工作這麼長時間的地圖文件數?可能是我的錯嗎?什麼可能是錯的?
在此先感謝。

+0

是否有人對此問題感興趣,請閱讀http://ayende.com/Blog/archive/2007/10/26/Real-World-NHibernate-Reducing-startup-times-for- large-amount-of.aspx和http://nhforge.org/blogs/nhibernate/archive/2009/03/13/an-improvement-on-sessionfactory-initialization.aspx – StuffHappens 2010-11-02 08:56:29

回答

2

如果您使用的是事件探查器,您應該能夠看到BuildConfiguration內部正在調用哪個調用。他們是什麼?

裝配體掃描是我的猜測。包含映射的程序集是否特別大?你已經告訴Fluent NHibernate掃描你的程序集映射,所以不管映射有多少,它仍然需要掃描整個程序集。

+0

它似乎不是彙編掃描。 BuildConfiguration中最耗時的函數是AddDocument(LoadMappingDocument + AddDocumentThroughQueue)。該組件不大。它僅包含映射和存儲庫的實現(〜35個類)。 – StuffHappens 2010-11-01 12:48:17

+0

'AddDocument'是一個NHibernate函數,只有當Fluent NHibernate完成編譯映射時纔會調用它。調用AddDocument'多少次?根據您的設置,我預計會有一次或19次。 – 2010-11-01 12:52:35

+0

你說得對。這是一個NHibernate功能。它被稱爲19次。 – StuffHappens 2010-11-01 12:54:13