1

当默认验证器模式设置为时,有什么方法可以加快 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 个实体,只有两个验证定义徘徊。

4

1 回答 1

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>
于 2011-04-19T12:41:54.443 回答