我正在使用VB.NET。
我正在执行一个返回大约2500行的select查询,每行包含7个字段。
我正在使用SqlDataAdapater并使用Select查询(来自本地数据库)返回的单个表填充数据集。 (我只执行一次数据检索(见下文),直到数据到达之后我才开始启动StopWatch)
我正在使用for循环遍历该表并使用数据填充对象数组。
这些对象只不过是存储每行数据的简单结构。
只是为了好玩,我这10次都是这样做,以便对这需要多长时间有一个很好的感觉...因为我想要的用法将涉及返回250,000行而不是2,500行。
我需要加快速度。
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中获取数据的最快方法的任何想法直接选择数组吗?
编辑:结果:以下代码在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毫秒内填充数组。那很快。
答案 0 :(得分:4)
不要浏览数据表。使用SqlReader一次读取一行,创建对象并填充它。 SqlCommand.ExecuteReader应该让你入门。
答案 1 :(得分:3)
使用DataReader而不是DataTable - >阵列。使用数据读取器,您可以将值直接写入数组。我不认为那会更快。