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