用于批量传输的MySqlDataAdapter或MySqlDataReader?

mysql sqlbulkcopy sql-server

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

有没有人使用以下其中一种方式获得更好的性能?

  • DataAdapter并以500块为单位调用填充到DataTable
  • DataReader。循环500中的DataTable

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

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

任何帮助,将不胜感激!

一般承认的答案

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


热门答案

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

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

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

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

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




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因