dav*_*nts 4 nhibernate fluent sql-server-profiler nhprof
这是使用Fluent NHibernate完成的
我有一个NHibernate查找,它从一个表中检索数据.如果我使用生成的sql并通过查询分析器运行它,运行需要大约18ms.
使用NHProfiler,我得到的查询持续时间为~1800ms - 比sql长100倍!
Query duration
- Database only:1800ms
- Total: 1806ms
Run Code Online (Sandbox Code Playgroud)
正在填充的对象包含一个子类,但是这个子进程是从NHibernate二级缓存加载的
正在返回的数据被分页(每个查询50个),尽管据我所知,这应该没有任何区别
我还有一个计数运行,再次,这在查询分析器中需要大约4ms,根据NHProfiler需要大约1800ms.
NH Profiler是显示查询执行时间还是检索的完整时间,映射类并构造对象图?如果它是前者 - 为什么它比直接运行查询需要更长的时间?
编辑:刚刚发现Ayende关于NH Profiler中给出的查询持续时间值的这篇文章:http://ayende.com/Blog/archive/2009/06/28/nh-prof-query-duration.aspx - 所以它绝对是需要很长时间的数据库查询
最后设法追查问题.
该对象的主键是数据库中的varchar.NHibernate在运行查询时将值转换为nvarchar.不幸的是,在NH Profiler中查看生成的sql时,这并不明显.减速是由sql将nvarchar转换回varchar引起的
我已指定映射使用自定义类型
map.Id(x => x.Id).CustomType("AnsiString");
Run Code Online (Sandbox Code Playgroud)
问题解决了
欢呼所有帮助人:)