我需要从数据库中实现大约20000条记录并将其写为CSV。不幸的是,NHibernate对这些记录的实现非常缓慢。是否有选项可以获取Nhibernate Linq Provider生成的SQL或编写自定义实现机制,而不是创建新对象会写入行到流?
答案 0 :(得分:3)
您应该使用LINQ的select子句将加载的数据直接投影到某些DTO类型(或匿名类)。这将绕过NHibernate正常跟踪状态的所有事情。
答案 1 :(得分:1)
如果您实际上只是从数据库中读取并写入CSV而不更新任何记录,则可以使用无状态会话来加快速度。
此博客文章
http://ayende.com/blog/4137/nhibernate-perf-tricks
有关于批量操作的性能加速的一些信息。
答案 2 :(得分:1)
您应首先考虑使用NHProf(http://www.hibernatingrhinos.com/products/NHProf)等工具来检查NHibernate Linq Provider生成的SQL查询。
使用NHibernate不允许完全抽象它依赖的SQL DB。如果您的查询涉及多个表或标准,则需要考虑通常的SQL性能问题(即索引,您加入的列,子查询)。
20000条记录对我来说似乎并不多,所以你应该先看看那个方向。