2009-11-13 47 views
9

實際上,我們發現默認的NHibernate(v2.0 & 2.1)FlushMode = Auto非常昂貴。回顧NHibernate源代碼表明,確定需要刷新什麼的算法依賴於在會話中循環遍歷所有實體的蠻力,並且這發生在事務中的每個查詢運行。爲什麼NHibernate的AutoFlush檢查如此昂貴?

在許多項目更新的某些生產場景中,對於多個查詢,我們看到該過程使用FlushMode = Auto比FlushMode = Commit長100倍。執行涉及多個更新「複雜」會話邏輯,多個查詢等

優化NHibernate的自動沖洗算法任何想法時

任何想法/諮詢/最佳FlushMode的使用方式?

+0

相關的問題:http://stackoverflow.com/questions/1724307/nhibernate-poor-performance-on-auto-flush-events – zvolkov 2009-11-16 16:46:24

+0

是的...其實同樣的問題:) – Pawel 2009-11-16 20:26:14

回答

6

這緩慢是一個已知的問題,並且在NH吉拉被跟蹤爲NH-1365

有在NH 3種沖洗模式:在需要時(在提交和查詢之前

  • FlushMode.Auto =沖洗,如果需要的話)。這是默認設置。
  • FlushMode.Commit =僅在NH事務提交時刷新
  • FlushMode.Never =永不刷新(直到調用Flush)。這將插入使用本機(身份)PK生成器的實體的still go to DB
+0

謝謝,很高興知道它是一個已知的問題。很遺憾,知道這是一個多年的知識問題!我明白,有很多方法可以重新安排代碼來限制執行的刷新次數。儘管如此,Nhibernate的沖水表現似乎比應該慢很多。 – Pawel 2009-11-16 20:25:21