【发布时间】:2011-01-17 09:32:39
【问题描述】:
这是使用 Fluent NHibernate 完成的
我有一个 NHibernate 查找,它正在从一个表中检索数据。如果我使用生成的 sql 并通过查询分析器运行它,大约需要 18ms 才能运行。
使用 NHProfiler,我得到这个查询的持续时间为 ~1800 毫秒 - 比 sql 长 100 倍!
Query duration
- Database only:1800ms
- Total: 1806ms
正在填充的对象包含一个子类,但是这个子类是从 NHibernate 二级缓存加载的
返回的数据是分页的(每个查询 50 个),但据我所知,这应该没有任何区别
我还运行了一个计数,根据 NHProfiler,这在查询分析器中需要约 4 毫秒,而根据 NHProfiler,这需要约 1800 毫秒。
NH Profiler 是显示查询 执行时间,还是检索、映射类和构造对象图的完整时间?如果是前者 - 为什么它比直接运行查询要花这么长时间?
编辑:刚刚发现 Ayende 的这篇关于 NH Profiler 中给出的查询持续时间值的帖子:http://ayende.com/Blog/archive/2009/06/28/nh-prof-query-duration.aspx - 所以肯定是数据库的查询需要很长时间
【问题讨论】:
-
使用 ADO.NET 需要多长时间?
-
使用 ant 或 dottrace 之类的分析器分析代码时的主要瓶颈是什么?
-
使用 ADO.NET 只需要 NHibernate 的一小部分时间。目前我还没有安装任何分析软件,所以我将对其进行排序并查看它的内容
-
Ants 显示整个过程只需要 160 毫秒,这是我的测试和 NH Profiler 告诉我的十分之一。我已经尝试在分离 NH Profiler 的情况下重新运行,以防出现问题,这也没有任何区别
-
测量不同的时间会让人感到困惑。当您使用 System.Diagnostics.Stopwatch 来计时调用使用 NHibernate 和数据库的方法的代码的实际执行时,需要多长时间?我希望这能给你“真正的”时间。
标签: nhibernate fluent sql-server-profiler nhprof