Я использую VB.NET.
Я выполняю запрос на выборку, который возвращает примерно 2500 строк, каждая из которых содержит 7 полей.
Я использую SqlDataAdapater и заполняю набор данных одной таблицей, возвращаемой запросом Select (из локальной базы данных). (Я выполняю поиск данных только один раз (см. Ниже) и даже не запускаю секундомер до тех пор, пока данные не поступят)
Я перебираю эту таблицу с помощью цикла for и заполняю массив объектов данными.
Эти объекты - не что иное, как простые структуры для хранения каждой строки данных.
Просто для забавы, я делаю это все 10 раз, чтобы понять, сколько времени это займет ... потому что мое желаемое использование будет включать в себя возвращение 250 000 строк вместо 2500.
Мне нужно ускорить это.
Dim SW As New Stopwatch
SW.Start()
For j As Integer = 0 To 10
Dim T As DataTable = ds.Tables(0)
Dim BigArray(0 To T.Rows.Count - 1) As MyObj
For i As Integer = 0 To T.Rows.Count - 1
BigArray(i) = New MyObj
BigArray(i).A = T(i)(0)
BigArray(i).B = T(i)(1)
BigArray(i).C = T(i)(2)
BigArray(i).D = T(i)(3)
BigArray(i).E = T(i)(4)
BigArray(i).F = T(i)(5)
BigArray(i).G = T(i)(6)
Next
Next
MsgBox(SW.ElapsedMilliseconds)
Есть какие-нибудь идеи относительно самого быстрого метода получения данных из SQL Select непосредственно в массив?
edit: Результаты: следующий код выполняется за 4 миллисекунды, а не за 2050 миллисекунд, выполняемых за одну итерацию вышеуказанного внешнего цикла.
cmd = New SqlCommand("select stuff", conn)
reader = cmd.ExecuteReader()
Dim SW As New Stopwatch
SW.Start()
Dim BigArray(0 To RowCount - 1) As MyObj
Dim i As Integer = 0
While (reader.Read())
BigArray(i) = New MyObj
BigArray(i).A= reader(0)
BigArray(i).B= reader(1)
BigArray(i).C= reader(2)
BigArray(i).D= reader(3)
BigArray(i).E= reader(4)
BigArray(i).F= reader(5)
BigArray(i).G= reader(6)
i += 1
End While
MsgBox(SW.ElapsedMilliseconds)
Edit2: FYI - Запустил запрос, возвращающий 250 000 результатов, и он заполняет массив за 560 мс, используя второй набор кода. Это быстро