에 2 억 개 행을 삽입 I가 내가 속도를 최적화하고자하는 다음 (간체) 코드 : 이미 일을 속도를 시도 SqlBulkCopy의를 사용하고C#을 최적화 : 데이터베이스
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();
,하지만 DataTable 자체에 값을 할당하는 것이 느린 것으로 나타납니다.
DataTable의 작동 방식을 모르므로 먼저 재사용 가능한 배열을 만든 다음 불필요한 오버 헤드를 만든 다음 DataRow에 할당하고 DataTow를 DataTable에 추가하는 방법으로 궁금합니다. 또는 DataTable을 처음부터 최적으로 사용하지 않습니까? 입력은 데이터베이스에서 가져옵니다.
나는 LOC, 단지 속도에 대해 많이 걱정하지 않는다. 누구든지 이것에 대해 조언을 해줄 수 있습니까?
구현 예는 'SimpleDataReader'를 참조하십시오. [여기] (https://groups.google.com/group/microsoft.public.dotnet.languages.csharp/msg/b1d70b504cdee2ad?hl=ko) –