1

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

有没有人使用以下之一体验过更好的性能?

  • DataAdapter 并以 500 个块调用 Fill 到 DataTable
  • DataReader.Read 在 500 的循环中读取到 DataTable

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

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

任何帮助,将不胜感激!

4

2 回答 2

3

我没有使用过 SqlBulkCopy,但一般来说,DataReaders 通常会提供更好的性能。

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

DataAdapter 将完整的结果集加载到 DataTable/DataSet 中,由于信息在内存中的存储方式和附加的关联状态(想想 rowstate 等),这将具有更高的开销。

如果我只读取数据,我将始终使用 DataReader 而不是 DataAdapter ...如果我在任何一点上错了,请纠正我?

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

于 2010-05-04T21:22:22.530 回答
2

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

于 2010-05-12T23:32:40.750 回答