这是输出50列50列记录的最佳方法。 Datareader或BCP?

时间:2016-07-04 23:39:33

标签: c# sql-server performance entity-framework

当前的数据导出程序不期望大小,它使用实体框架并将IQueryable转换为列表以便导出。 Ram 16 GB在运行时不足。

我读到有两个选项可以避免这种情况,例如DataReader迭代和BCP。 但是我不确定2分。

  1. 在这种5 mil记录的情况下,BCP是否会导致内存问题。
  2. 与BCP相比,数据阅读器会非常慢。
  3. 有人可以提出建议。

1 个答案:

答案 0 :(得分:1)

方法1:

如果您想要导出的结果中没有任何大的BLOB数据,我肯定会使用DataReader(作为评论中的@TrevorAsh点)。您可以使用它来批量复制数据,这将解决您的内存问题。

一旦您开始阅读您可以直接或以您选择的批量存储结果。如果它不够快你可以将结果分成多个集合并在多个线程中读取它们,但这实际上取决于你的场景......

方法2:

替代方法是将partition源数据导入SQL Server上的多个文件组/文件,然后备份&仅复制包含数据的mdf文件备份