以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何提高代码运行效率(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=86473)

--  作者:yyzlxc
--  发布时间: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编辑过]

--  作者:狐狸爸爸
--  发布时间:2016/6/18 9:36:00
--  

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

 

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


--  作者:yyzlxc
--  发布时间: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编辑过]