Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 在大型数据表中查找不同的行_Vb.net_.net 2.0_Datatable_Foreach - Fatal编程技术网

Vb.net 在大型数据表中查找不同的行

Vb.net 在大型数据表中查找不同的行,vb.net,.net-2.0,datatable,foreach,Vb.net,.net 2.0,Datatable,Foreach,目前,我们有一个大型数据表(~152k行),并且正在对每个数据表执行一次for-each操作,以找到一个子集的不同条目(~124K行)。目前,运行该程序大约需要14分钟,但时间太长了 由于我们被困在.NET 2.0中,因为我们的报告无法与VS 2008+配合使用,所以我不能使用linq,尽管公平地说,我不知道这是否会更快 对于每个循环,是否有更好的方法来查找除此之外的不同行(本例中为发票编号) 代码如下: Public Shared Function SelectDistinctList(ByV

目前,我们有一个大型数据表(~152k行),并且正在对每个数据表执行一次for-each操作,以找到一个子集的不同条目(~124K行)。目前,运行该程序大约需要14分钟,但时间太长了

由于我们被困在.NET 2.0中,因为我们的报告无法与VS 2008+配合使用,所以我不能使用linq,尽管公平地说,我不知道这是否会更快

对于每个循环,是否有更好的方法来查找除此之外的不同行(本例中为发票编号)

代码如下:

Public Shared Function SelectDistinctList(ByVal SourceTable As DataTable, _
                                          ByVal FieldName As String) As List(Of String)
    Dim list As New List(Of String)
    For Each row As DataRow In SourceTable.Rows
        Dim value As String = CStr(row(FieldName))
        If Not list.Contains(value) Then
            list.Add(value)
        End If
    Next
    Return list

End Function

使用
字典
而不是
列表
会更快:

    Dim seen As New Dictionary(Of String, String)
    ...
        If Not seen.ContainsKey(value) Then
            seen.Add(value, "")
        End If
搜索
列表时,您将每个条目与
值进行比较,因此在搜索过程结束时,您将对每个记录进行约124K次比较。另一方面,
字典
,使用散列来加快查找速度

如果要返回唯一值列表,请使用
seen.Keys


(请注意,您最好为此使用
集合
类型,但.NET 2.0没有)。使用
字典
而不是
列表
会更快:

    Dim seen As New Dictionary(Of String, String)
    ...
        If Not seen.ContainsKey(value) Then
            seen.Add(value, "")
        End If
搜索
列表时,您将每个条目与
值进行比较,因此在搜索过程结束时,您将对每个记录进行约124K次比较。另一方面,
字典
,使用散列来加快查找速度

如果要返回唯一值列表,请使用
seen.Keys


(请注意,您最好为此使用
类型,但.NET2.0没有。)

这似乎让时间缩短到了1秒以下,看起来这是一个巨大的瓶颈!这似乎已经把它降到了1秒以下,看起来这是一个巨大的瓶颈!