我有以下的(簡化)代碼,我想優化速度,其中:C#優化:插入2個億行到數據庫
long inputLen = 50000000; // 50 million
DataTable dataTable = new DataTable();
DataRow dataRow;
object[] objectRow;
while (inputLen--)
{
objectRow[0] = ...
objectRow[1] = ...
objectRow[2] = ...
// Generate output for this input
output = ...
for (int i = 0; i < outputLen; i++) // outputLen can range from 1 to 20,000
{
objectRow[3] = output[i];
dataRow = dataTable.NewRow();
dataRow.ItemArray = objectRow;
dataTable.Rows.Add(dataRow);
}
}
// Bulk copy
SqlBulkCopy bulkTask = new SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, null);
bulkTask.DestinationTableName = "newTable";
bulkTask.BatchSize = dataTable.Rows.Count;
bulkTask.WriteToServer(dataTable);
bulkTask.Close();
我已經在試圖加快速度使用SqlBulkCopy的
,但它似乎分配給DataTable本身的值證明是緩慢的。
我不知道DataTable如何工作,所以我想知道如果我通過首先創建一個可重用的數組,然後將其分配給DataRow,然後將DataRow添加到DataTable中創建不必要的開銷?或者首先使用DataTable不是最優的?輸入來自數據庫。
我不在乎LOC,只是速度。任何人都可以提供一些建議嗎?
對於示例實現,請查看`SimpleDataReader` [here](https://groups.google.com/group/microsoft.public.dotnet.languages.csharp/msg/b1d70b504cdee2ad?hl=en) – 2011-02-01 08:20:22