nhibernate水合性能

时间:2010-10-19 07:21:36

标签: performance nhibernate

上下文 具有版本标签文档的域模型。

使用nHibernate进行保湿时,您会期待什么样的数字?

我的域模型不是很复杂,当我查询所有文档获取版本以及标签时,查询从数据库返回的行数超过8000行 - 而这些行又被水合成约2300个文档。

数据库操作大约需要100ms,水化过程需要4000ms,我觉得很奇怪。

dotTrace表示大量的呼叫(1.6M)到

  

“System.Data.SQLite.SQLite3.ColumnName(SQLiteStatement,Int32)”

之类的。

使用如下标准执行查询:

var docsQuery = _session.CreateCriteria<Document>();            
docsQuery.SetFetchMode("Editions", FetchMode.Join);
docsQuery.SetFetchMode("Tags", FetchMode.Join);
docsQuery.SetResultTransformer(new DistinctRootEntityResultTransformer());
return docsQuery .List<Document>();

注意:当然,限制结果集会提高性能。我主要担心的是为什么一般的水合作用表现不好。在我的情况下,摆弄session.FlushMode和session.CacheMode并没有多大帮助。

更新:以下是分析器的截图。

dotTrace

更新2 :检查查询时间,总共大约100毫秒。

1 个答案:

答案 0 :(得分:0)

  • 您是否在不使用DistinctRootEntityResultTransformer的情况下尝试了查询? (您可能需要解决N + 1问题,但有解决方案。)
  • 您是否打开了反射优化器?