如何提高NHibernate的选择性能

时间:2012-11-02 14:16:53

标签: nhibernate linq-to-nhibernate

我需要从数据库中实现大约20000条记录并将其写为CSV。不幸的是,NHibernate对这些记录的实现非常缓慢。是否有选项可以获取Nhibernate Linq Provider生成的SQL或编写自定义实现机制,而不是创建新对象会写入行到流?

3 个答案:

答案 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条记录对我来说似乎并不多,所以你应该先看看那个方向。