2010-11-01 59 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