ADO. NET: Как выполнить массовое копирование строк в DataTable в другой - PullRequest
0 голосов
/ 22 апреля 2020

Устаревшее приложение копирует 100K записей в одну DataTable в другую, например:

For index = 0 To dataTable.Rows.Count() - 1
    Dim column1 = CType(dataTable.Rows(index).Item("column1"), Integer)
    Dim column2 = CType(dataTable.Rows(index).Item("column2"), Integer)
    Dim column3 = CType(dataTable.Rows(index).Item("column3"), Integer)

    Dim dataRow = ds.Tables("MyTable").NewRow

    dataRow("column1") = column1
    dataRow("column2") = column2
    dataRow("column3") = column3

    ds.Tables("MyTable").Rows.Add(dataRow)
Next

Это кажется очень медленным, поскольку нам нужно повторить 100K раз и добавить новую строку. Существуют ли какие-либо. NET API-интерфейсы для массового копирования строк, чтобы уменьшить время, необходимое для копирования всего? Источник DataTable имеет гораздо больше столбцов, тогда как пункт назначения является подмножеством. Мы могли бы реорганизовать код, чтобы использовать только исходный код, но это сложное приложение, и для него потребуется регрессионное тестирование, поскольку исходные и конечные таблицы являются глобальными переменными и используются во многих местах.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Я не уверен, насколько, но я ожидал бы, что это будет быстрее:

Dim newTable = oldTable.DefaultView.ToTable(False,
                                            {"column1",
                                             "column2",
                                             "column3"})
0 голосов
/ 22 апреля 2020

Как насчет этого? "dataTable.Copy ()"

https://docs.microsoft.com/en-gb/dotnet/api/system.data.datatable.copy?view=netframework-4.8

 // Create an object variable for the copy.
    DataTable copyDataTable;
    copyDataTable = table.Copy();
...