因为我认为性能会很差,所以我不想将DataTable写入CSV文件并使用MySqlBulkLoader类从那里进行插入。
不要根据无根据的假设排除可能的解决方案。我只是测试的从100,000行插入
System.Data.DataTable使用标准到MySQL表
MySqlDataAdapter#Update()内
Transaction。持续大约需要30秒才能运行:
using (MySqlTransaction tran = conn.BeginTransaction(System.Data.IsolationLevel.Serializable)){ using (MySqlCommand cmd = new MySqlCommand()) { cmd.Connection = conn; cmd.Transaction = tran; cmd.CommandText = "SELECT * FROM testtable"; using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) { da.UpdateBatchSize = 1000; using (MySqlCommandBuilder cb = new MySqlCommandBuilder(da)) { da.Update(rawData); tran.Commit(); } } }}(我尝试了几个不同的值,
UpdateBatchSize但它们似乎对经过时间没有重大影响。)
相比之下,下面的代码使用
MySqlBulkLoader只花了5到6秒钟即可运行…
string tempCsvFileSpec = @"C:UsersGordDesktopdump.csv";using (StreamWriter writer = new StreamWriter(tempCsvFileSpec)){ Rfc4180Writer.WriteDataTable(rawData, writer, false);}var msbl = new MySqlBulkLoader(conn);msbl.TableName = "testtable";msbl.FileName = tempCsvFileSpec;msbl.FieldTerminator = ",";msbl.FieldQuotationCharacter = '"';msbl.Load();System.IO.File.Delete(tempCsvFileSpec);…包括以下时间:将DataTable中的100,000行转储到临时CSV文件中(使用与此类似的代码),从该文件中批量加载,然后再删除该文件。



