用于批量传输的MySqlDataAdapter或MySqlDataReader?

时间:2010-05-04 20:40:08

标签: mysql sql-server sqlbulkcopy

我正在使用.NET的MySql连接器将数据从MySql服务器复制到SQL Server 2008.

有没有人使用以下哪种方式获得更好的性能?相比之下?

  • DataAdapter并以500
  • 的块调用填充到DataTable
  • DataReader.Read to a DataTable,循环为500

然后我使用SqlBulkCopy加载500个DataTable行,然后继续循环,直到完全转移MySql记录集。

我主要关注使用合理数量的内存并在短时间内完成。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

我没有使用过SqlBulkCopy,但作为一般的经验法则,DataReaders通常提供更好的性能。

当底层查询仍然返回记录时,可以处理DataReader(因此您无需等待查询完成,然后才能开始处理数据)。 DataReader会在数据可用时立即返回,我相信默认情况下只会将活动记录存储在内存中(而不是完整的结果集),从而减少了内存使用量。

DataAdapter将完整的结果集加载到DataTable / DataSet中,由于信息在内存中的存储方式以及附加的关联状态(想想rowstate等),因此会产生更高的开销。

如果我只是在阅读数据,我将始终在DataAdapter上使用DataReader ...如果我在任何方面出错,请有人纠正我吗?

无论如何,SqlBulkCopy似乎只迭代记录并且不使用DataTable进行任何优化(根据Reflector),所以我认为DataReader是你最好的选择。

答案 1 :(得分:2)

我在处理大量数据时使用了SqlBulkCopy和DataReader。我发现这个过程在速度和内存使用方面非常有效,因为在复制之前不会检索整个数据集。我建议将BatchSize属性设置为某个合理的值,例如500。