Foxtable(狐表)用户栏目专家坐堂 → [求助]如何提高代码运行效率(已解决)


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

主题:[求助]如何提高代码运行效率(已解决)

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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]如何提高代码运行效率(已解决)  发帖心情 Post By:2016/6/18 9:00:00 [只看该作者]

下面这段代码运行效率极低,100行数据需要近5秒时间,如何提高效率,请各位老师指教,谢谢!!


For Each dr As DataRow In DataTables("采集批次").DataRows
    If dr.IsNull("日期") = False Then
        dr("结束时间") = DataTables("扎包记录").SQLCompute("Max(拔卡时间)", "批次编号 = '" & dr("批次编号") & "'")
    End If
    If dr.IsNull("批次编号") = False Then
        Dim pr As DataRow = DataTables("扎包记录").SQLFind("批次编号 = '" & dr("批次编号") & "' and 结束标记 = 2")
        If pr IsNot Nothing Then
            dr("结束标记") = True
        Else
            dr("结束标记") = False
        End If
    End If
    If dr.IsNull("批次编号") = False Then
        Dim pr As DataRow = DataTables("工位数据").SQLFind("批次编号 = '" & dr("批次编号") & "'")
        If pr IsNot Nothing Then
            dr("工位数据") = True
        Else
            dr("工位数据") = False
        End If
    End If
Next
[此贴子已经被作者于2016/6/18 11:15:05编辑过]

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


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2016/6/18 9:36:00 [只看该作者]

这个和Foxtable无关,和客户端与付服务器之间的通讯速度有关,和你的设计思路关系更大。

 

我记得以前给过你思路,用Foxtable的后台统计工具,一次将相关数据统计出来,然后遍历统计表,将统计结果写入目标表。


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


加好友 发短信
等级:七尾狐 帖子:1530 积分:10633 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2016/6/18 11:14:00 [只看该作者]

谢谢狐爸老师的指教!通过后台汇总,前台遍历填充,运行时间从原来的近5秒缩短到0.25秒(代码如下),速度提升近20倍。再次衷心感谢狐爸老师!!


Dim cmd1 As New SQLCommand
Dim dt1 As DataTable
cmd1.Connection Name = "MES"
cmd1.CommandText = "S elect 批次编号,Max(拔卡时间) As 结束时间,Max(结束标记) As 结束标记 F ROM {扎包记录} Group By 批次编号"
dt1 = cmd1.ExecuteReader()
Dim cmd2 As New SQLCommand
Dim dt2 As DataTable
cmd2.Connection Name = "MES"
cmd2.CommandText = "S elect 批次编号 F ROM {工位数据} Group By 批次编号"
dt2 = cmd2.ExecuteReader()
For Each dr As DataRow In DataTables("采集批次").DataRows
    If dr.IsNull("日期") = False Then
        dr("结束时间") = dt1.Compute("Max(结束时间)", "批次编号 = '" & dr("批次编号") & "'")
        Dim pr1 As DataRow = dt1.Find("批次编号 = '" & dr("批次编号") & "'and 结束标记 = 2")
        Dim pr2 As DataRow = dt2.Find("批次编号 = '" & dr("批次编号") & "'")
        If pr1 IsNot Nothing Then
            dr("结束标记") = True
        Else
            dr("结束标记") = False
        End If
        If pr2 IsNot Nothing Then
            dr("工位数据") = True
        Else
            dr("工位数据") = False
        End If
    End If
Next
DataTables("采集批次").Save()
Tables("采集批次").AutoSizeCols()

[此贴子已经被作者于2016/6/18 11:18:34编辑过]

 回到顶部