.NET - SQL Select - >阵列。什么是最快的方式?

时间:2009-10-22 06:49:25

标签: .net sql vb.net arrays

我正在使用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毫秒内填充数组。那很快。

2 个答案:

答案 0 :(得分:4)

不要浏览数据表。使用SqlReader一次读取一行,创建对象并填充它。 SqlCommand.ExecuteReader应该让你入门。

答案 1 :(得分:3)

使用DataReader而不是DataTable - >阵列。使用数据读取器,您可以将值直接写入数组。我不认为那会更快。