0

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

4

3 回答 3

3

您可能应该使用 LINQ 的 select 子句将加载的数据直接投影到某个 DTO 类型(或匿名类)。这将绕过 NHibernate 通常为跟踪状态所做的一切。

于 2012-11-02T15:18:54.657 回答
1

如果您真的只是从数据库中读取并写入 CSV 而没有更新任何记录,则可以使用无状态会话来加快速度。

这篇博文

http://ayende.com/blog/4137/nhibernate-perf-tricks

有一些关于批量操作性能加速的信息。

于 2012-11-02T14:20:17.020 回答
1

您应该首先考虑使用像 NHProf (http://www.hibernatingrhinos.com/products/NHProf) 这样的工具来检查 NHibernate Linq Provider 生成的 SQL 查询。

使用 NHibernate 不允许完全抽象它所依赖的 SQL DB。如果您的查询涉及多个表或 where 条件,您需要考虑常见的 SQL 性能问题(即索引、要加入的列、子查询)。

20000 条记录对我来说似乎并不多,所以你应该首先朝那个方向看。

于 2012-11-08T10:08:53.410 回答