tengo el siguiente (simplificado) código que me gustaría optimizar la velocidad:C# Optimización: Inserción de 200 millones de filas en la base de datos
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();
ya estoy usando SqlBulkCopy en un intento de acelerar las cosas , pero parece que la asignación de valores a la DataTable en sí misma es lenta.
No sé cómo funcionan las DataTables, así que me pregunto si estoy creando sobrecarga innecesaria creando primero una matriz reutilizable, luego asignándola a una DataRow, y luego agregando DataRow a la DataTable. ¿O está utilizando DataTable no es óptimo en primer lugar? La entrada proviene de una base de datos.
No me importa mucho la LOC, solo la velocidad. ¿Alguien puede dar un consejo sobre esto?
Para ver una implementación de ejemplo, consulte 'SimpleDataReader' [aquí] (https://groups.google.com/group/microsoft.public.dotnet.languages.csharp/msg/b1d70b504cdee2ad?hl=en) –