Я смотрю на старое веб-приложение, которое я написал, и на чтение 4500 записей из DataTable
уходит около часа, чтобы оно могло записать их в файл CSV.Я чувствую, что должен быть какой-то способ улучшить это.
Несколько замечаний:
Таблица данных содержит ... 376 столбцов
Впо крайней мере, я думаю, что это то, что преобразует столбец NL
в Excel.Я просто посмотрел количество столбцов и понятия не имел, что их так много.Наш поставщик программного обеспечения еще не осознал значение динамических SQL-операторов для этого процесса, поэтому при каждом обновлении программного обеспечения просто добавляется больше столбцов, а не только выбираются нужные.
Я не могуизменить оператор SQL, который генерирует данные
В зависимости от типа данных данные должны быть отформатированы в определенном формате
Данныесодержит специальные символы, такие как запятые
Медленная часть читает данные.Быстро получить данные с сервера SQL и записать их в CSV.
Вот код.Простите за беспорядок, я написал его обратно, когда я не знал, что я делал, и когда я все еще работал в VB
Function ReadDataTableForCSV(dt as DataTable)
Dim sb = New StringBuilder()
Dim dataTypes As New Dictionary(Of String, Integer)
' Header Row
For i as Integer = 0 to dt.Columns.Count - 1
Dim col as DataColumn = dt.Columns(i)
Dim t = col.DataType
If t is GetType(Boolean) Then
dataTypes.Add(i, 1)
Else If t is GetType(Decimal) Then
dataTypes.Add(i, 2)
Else
dataTypes.Add(i, 3)
End If
sb.Append(String.Format("""{0}""", col.ColumnName))
sb.Append(Iif(i = dt.Columns.Count - 1, vbLf, ","))
Next
' Items
For Each row as DataRow in dt.Rows
For i As Integer = 0 To dt.Columns.Count - 1
Select dataTypes(i)
Case 1
sb.Append(String.Format("""{0}""", CInt(row(i))))
Case 2
sb.Append(String.Format("""{0}""", FormatNumber(row(i), 2, , , 0)))
Case 3
sb.Append(String.Format("""{0}""", row(i)))
End Select
sb.Append(Iif(i = dt.Columns.Count - 1, vbLf, ","))
Next
Next
End Function
Редактировать: Удален код, не связанный с проблемой