2010-05-04 39 views
1

我使用.NET的MySql連接器將數據從MySql服務器複製到SQL Server 2008.用於批量傳輸的MySqlDataAdapter或MySqlDataReader?

有沒有人使用下列其中一種體驗更好的性能?

  • DataAdapter的,並要求填寫在500
  • DataReader.Read的塊數據表到數據表中的500

一個循環,然後我使用SqlBulkCopy的加載500個數據錶行,然後繼續循環直到MySql記錄集被完全傳輸。

我主要關注使用合理的內存量並在短時間內完成。

任何幫助,將不勝感激!

+0

你願意發佈你的解決方案嗎?我目前需要將大量數據從MySQL移動到MSSQL,並且在使用DataTable.Fill(MySQLDataReader)填充數據表時使用OutOfMemoryException。您的解決方案可以爲我節省大量時間。 – callisto 2011-08-03 08:37:18

回答

2

在處理大量數據時,我在DataReader中使用了SqlBulkCopy。我發現該過程在速度和內存使用方面非常高效,因爲在複製之前不會檢索整個數據集。我建議將BatchSize屬性設置爲一些合理的值,比如500。

2

我還沒有使用SqlBulkCopy,但作爲一般的經驗法則,DataReaders通常會提供更好的性能。

可以在底層查詢仍然返回記錄時處理DataReader(因此,在開始處理數據之前,不必等待查詢完成)。 DataReader會在數據可用時立即返回數據,我相信只會將活動記錄默認存儲在內存中(而不是完整的結果集),從而減少內存使用量。

DataAdapter會將完整的結果集加載到DataTable/DataSet中,由於信息在內存中的存儲方式以及附加的關聯狀態(認爲行狀態等),會導致更高的開銷。

如果我只是在讀數據,我會一直使用DataReader通過DataAdapter ...有人請糾正我,如果我在任何一點都錯了嗎?

無論如何,SqlBulkCopy似乎只遍歷記錄,並沒有使用DataTable進行任何優化(根據Reflector),所以我認爲DataReader是您最好的選擇。