2011-04-19 61 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