nhibernate水合性能

Jen*_*nsJ 6 nhibernate performance

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

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

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

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

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

"System.Data.SQLite.SQLite3.ColumnName(SQLiteStatement,Int32)"

等等.

查询是使用Criteria执行的,如下所示:

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

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

更新:这是分析器的截图.

dotTrace

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

Ste*_*ger 0

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