NHibernate查询技术全解析
1. 报告查询
在使用NHibernate进行查询时,即使结果集很小,NHibernate也需要将查询结果对象添加到 ISession 缓存(可能还有二级缓存)中,并管理对象的唯一性等。而报告查询可以避免管理 ISession 缓存的开销,其与直接使用SQL/ADO.NET的开销相比,通常是难以测量的,即使在一些极端情况下(如从本地数据库加载一百万个对象且无网络延迟)也是如此。
报告查询使用HQL中的投影功能,可精确指定要检索的属性。例如:
select user.Lastname, count(user)
from User user
group by user.Lastname
这个查询不会返回持久化实体,因此NHibernate不会将事务对象添加到 ISession 缓存中,也不会跟踪这些返回对象的更改。报告查询还能更快地释放分配的内存,因为对象不会一直保留在 ISession 缓存中,直到 ISession 关闭,在执行报告后,一旦应用程序不再引用这些对象,它们就可能被垃圾回收。
不过,这些考虑通常是非常次要的,不建议将所有只读事务重写为使用报告查询,因为报告查询更冗长,且(可以说)不太面向对象,同时对NHibernate缓存的使用效率也较低。应遵循“不要过早优化”的原则,在遇到实际性能问题时再使用这种优化方法。
NHibernate查询技术详解与实践
订阅专栏 解锁全文
64

被折叠的 条评论
为什么被折叠?



