以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  find 效率问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=87849)

--  作者:xujie80
--  发布时间:2016/7/21 10:33:00
--  find 效率问题

员工资料有8万多条数据,粮农直补有万多条数据

执行下列语句:

Dim dt1 As DataTable = DataTables("员工资料")

Dim dt2 As DataTable = DataTables("粮农直补")

Dim i1 As Integer = 0

Dim i2 As Integer = 0

For Each dr As DataRow In dt2.DataRows

    Dim fdr As DataRow = dt1.find("身份证号 = \'" & dr("身份证号") & "\'")

    If fdr IsNot Nothing Then

        fdr("姓名")=  dr("姓名")

i1 = i1+1

 

    Else

        Dim ndr As DataRow = DT1.ADDNEW()

        ndr("身份证号") = dr("身份证号")

        ndr("姓名") = dr("姓名")

i2 = i2 +1

    End If

Next

PopMessage("共更新了" & i1 & "条记录" & vbcrlf & "新增了" & i2 & "条记录","通知", PopIconEnum.OK, 5)


结果虽然在运行,但是效率很低,查看运行情况


此主题相关图片如下:111.png
按此在新窗口浏览图片

有什么办法提高效率?


--  作者:大红袍
--  发布时间:2016/7/21 10:45:00
--  

Dim dt1 As DataTable = DataTables("员工资料")
Dim dt2 As DataTable = DataTables("粮农直补")

Dim i1 As Integer = 0
Dim i2 As Integer = 0

Dim 找到的行 As new Dictionary(Of DataRow, DataRow)
Dim 增加的行 As new List(Of DataRow)

For Each dr As DataRow In dt2.DataRows
   
    Dim fdr As DataRow = dt1.find("身份证号 = \'" & dr("身份证号") & "\'")
   
    If fdr IsNot Nothing Then
        找到的行.Add(dr, fdr)
        i1 = i1+1
    Else
        增加的行.Add(dr)
        i2 = i2 +1
    End If
   
Next
For Each key As DataRow In 找到的行.Keys
    找到的行(key)("姓名") = key("姓名")
Next
For Each dr As DataRow In 增加的行
    Dim ndr As DataRow = DT1.ADDNEW()
   
    ndr("身份证号") = dr("身份证号")
   
    ndr("姓名") = dr("姓名")
next


PopMessage("共更新了" & i1 & "条记录" & vbcrlf & "新增了" & i2 & "条记录","通知", PopIconEnum.OK, 5)


--  作者:大红袍
--  发布时间:2016/7/21 10:46:00
--  

 效率慢的原因

 

http://www.foxtable.com/webhelp/scr/2225.htm