2011-04-19 62 views
1

很慢有加快的时间NHibernate的验证需要时默认验证模式设置为ValidatorMode.OverrideAttributeWithExternal初始化的方法吗?NHibernate的验证器初始化是ValidatorMode.OverrideAttributeWithExternal

它需要超过11秒,我相当小的项目来完成我的蛮快的机器上初始化:

FluentConfiguration configuration = new FluentConfiguration(); 
    configuration 
     .SetDefaultValidatorMode(ValidatorMode.OverrideAttributeWithExternal) 
     .IntegrateWithNHibernate.ApplyingDDLConstraints().RegisteringListeners(); 

ValidatorEngine validatorEngine = 
    NHibernate.Validator.Cfg.Environment.SharedEngineProvider.GetEngine(); 

validatorEngine.Configure(configuration); 

// Takes 11 seconds to finish, unless the SetDefaultValidatorMode above is removed. 
ValidatorInitializer.Initialize(nhibernateCfg, validatorEngine); 

我有大约50个实体和短短两年徘徊在验证定义。

+0

你运行的是什么版本的NHV? – 2011-04-19 12:42:54

+0

我使用NHV 1.3.0.2001。 – 2011-04-19 12:46:45

+0

我不知道有什么区别,但我正在运行1.3.0.4000。 [SourceForge](http://sourceforge.net/projects/nhcontrib/files/NHibernate.Validator/1.3.0%20GA/) – 2011-04-19 12:55:34

回答

0

我有几乎相同的配置,你我的Initialize函数在不到一秒钟内完成。有一个问题我我的配置和你之间所看到的差异是以下为我流利配置的一部分:

.Register(Assembly.Load("Assembly.Where.External.Internal.Attributes.Live") 
      .ValidationDefinitions()) 

我不知道什么NHV的默认操作,如果你不指定这一点,但它是值得一试。

另外你可以尝试的一件事是在你的app.config中为NHV设置log4net日志,这可能会帮助你看到时间花在哪里。我不确定如何深入记录,但它可能会有所帮助。

如果一切都失败,您也可以通过它下载源代码并进行调试。

编辑:
下面是我用它来把我的NHV记录在一个单独的文件。

<logger name="NHibernate.Validator" additivity="false"> 
    <level value="DEBUG"/> 
    <appender-ref ref="WhateverAppenderYouWant"/> 
</logger> 
+2

我没有时间去尝试你的建议(我当然会)但我看过在NHV内部发生了很多异常吞咽,主要是因为它试图检索很多nhv.xml映射资源文件,这些文件在我的项目中不存在。我知道异常处理相对较慢的事实,但我无法确定它们是否是这里的真正罪魁祸首。 – 2011-04-21 08:01:13