上下文 具有版本和标签的文档的域模型。
使用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并没有多大帮助。
更新:以下是分析器的截图。
更新2 :检查查询时间,总共大约100毫秒。
答案 0 :(得分:0)
DistinctRootEntityResultTransformer
的情况下尝试了查询? (您可能需要解决N + 1问题,但有解决方案。)