使用ValidatorMode.OverrideAttributeWithExternal,NHibernate Validator初始化非常慢

时间:2011-04-19 10:30:35

标签: c# .net nhibernate nhibernate-validator

当默认验证器模式设置为ValidatorMode.OverrideAttributeWithExternal时,有没有办法加快NHibernate Validator初始化的时间?

在我相当小的项目中,我在相当快的机器上完成初始化需要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个实体,只剩下两个验证定义。

1 个答案:

答案 0 :(得分: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>