Foxtable(狐表)用户栏目专家坐堂 → 求教 代码执行效率问题


  共有3184人关注过本帖树形打印复制链接

主题:求教 代码执行效率问题

帅哥哟,离线,有人找我吗?
sh16
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:102 积分:1781 威望:0 精华:0 注册:2013/5/6 0:54:00
求教 代码执行效率问题  发帖心情 Post By:2014/5/23 10:26:00 [只看该作者]

For Each dr1 As DataRow In DataTables("结果").DataRows
    Dim dr As DataRow
    dr = DataTables("配置").Find("[内容] like '*" & dr1("PON口") & " ont " & dr1("ONUID") & " gemport 1*'")
    If dr IsNot Nothing Then
        Dim nr() As String
        nr = dr("内容").split(" ")
        dr1("PVLAN") = nr(4)
        dr1("CVLAN") = nr(13)
    Else
        dr1("PVLAN") = Nothing
        dr1("CVLAN") = Nothing
    End If
Next

 

这段代码有问题吗?执行了5分钟。。。。。"结果"表格有5000行,"配置"表有4万行。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/23 10:33:00 [只看该作者]

应该是触发了Datacolchanged里面的代码,试试这样

 

SystemReady = False

For Each dr1 As DataRow In DataTables("结果").DataRows
    Dim dr As DataRow
    dr = DataTables("配置").Find("[内容] like '*" & dr1("PON口") & " ont " & dr1("ONUID") & " gemport 1*'")
    If dr IsNot Nothing Then
        Dim nr() As String
        nr = dr("内容").split(" ")
        dr1("PVLAN") = nr(4)
        dr1("CVLAN") = nr(13)
    Else
        dr1("PVLAN") = Nothing
        dr1("CVLAN") = Nothing
    End If
Next

SystemReady = True


 回到顶部
帅哥哟,离线,有人找我吗?
sh16
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:102 积分:1781 威望:0 精华:0 注册:2013/5/6 0:54:00
  发帖心情 Post By:2014/5/23 10:36:00 [只看该作者]

可是我没有设置Datacolchanged事件啊,我是在命令窗口输入的,用了你的代码一样非常慢。
[此贴子已经被作者于2014-5-23 10:37:35编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/23 10:38:00 [只看该作者]

以下是引用sh16在2014-5-23 10:36:00的发言:
可是我没有设置Datacolchanged事件啊

 

先用2楼代码,如果测试成功,你绝对是在结果表的datacolchanged里面写了代码。

 

如果测试不成功,请上传例子测试


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/23 10:40:00 [只看该作者]

 上传项目。


 回到顶部
帅哥哟,离线,有人找我吗?
sh16
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:102 积分:1781 威望:0 精华:0 注册:2013/5/6 0:54:00
  发帖心情 Post By:2014/5/23 10:42:00 [只看该作者]

Datacolchanged肯定没设置,用了你的代码一样的情况。只是简单的查找,查找条件包含几段。仅此而已。卡了至少5分钟。


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/23 10:43:00 [只看该作者]

这样也许能再快点

Dim Dic As new Dictionary(of DataRowDataRow)
dim drr as datarow

SystemReady = False

For Each dr1 As DataRow In DataTables("结果").DataRows
    Dim dr As DataRow
    dr = DataTables("配置").Find("[内容] like '*" & dr1("PON口") & " ont " & dr1("ONUID") & " gemport 1*'")
    If dr IsNot Nothing Then
        dic.add(dr1,dr)

    Else
        dic.add(dr1,drr)
    End If
Next

For Each dr As DataRow In dic.Keys
    if dic(dr) isnot nothing then

        Dim nr() As String

        nr = dic(dr)("内容").split(" ")
        dr("PVLAN") = nr(4)
        dr("CVLAN") = nr(13)

    else

         dr("PVLAN") = Nothing

        dr("CVLAN") = Nothing

    end if
Next

SystemReady = True


 回到顶部
帅哥哟,离线,有人找我吗?
sh16
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:102 积分:1781 威望:0 精华:0 注册:2013/5/6 0:54:00
  发帖心情 Post By:2014/5/23 10:43:00 [只看该作者]

等下再传,卡着动不了

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/23 10:44:00 [只看该作者]

 1、数据量的问题问题。

 

 2、like查询本来就很慢的,得看比较的内容的多少。

 

 3、需要优化代码。


 回到顶部
帅哥哟,离线,有人找我吗?
Bin
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/5/23 10:45:00 [只看该作者]

试试7楼代码

 回到顶部
总数 12 1 2 下一页