上下文:
具有版本和标签的文档的领域模型。
使用nHibernate进行保湿时,您会期望什么样的数字?
我的域模型不是很复杂,当我查询所有获取版本的文档以及“标记”时,查询从数据库返回的行略多于8000行-而这些行又合并为大约2300个文档。
数据库操作大约需要100毫秒,而水化过程需要4000毫秒,我发现这很奇怪。
dotTrace表示有大量调用(1.6M)
等等。
使用以下条件执行查询:
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毫秒。
最佳答案
DistinctRootEntityResultTransformer
进行查询? (您可能需要解决N + 1问题,但是有解决方案。)关于performance - hibernate 水化性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3966105/