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

使用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/

    10-11 03:19