Foxtable(狐表)用户栏目专家坐堂 → 代码优化


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

主题:代码优化

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
代码优化  发帖心情 Post By:2018/11/10 9:40:00 [只看该作者]

大师:下面的代码如何优化


Dim t1 As DataTable = DataTables("Sheet3")
Dim pzh As new List(of String)
pzh = t1.GetValues("凭证号","对方科目 is null")
Dim Dic As new Dictionary(of String,Double)
Dim dfhj As Double
Dim Dicrow As new Dictionary(of String,List(of DataRow))
Dim Dicrow1 As new Dictionary(of String,List(of DataRow))
For Each pz As String In pzh
    
    dfhj = t1.Compute("sum(贷方)","凭证号 = '" & pz & "'")
    dic.Add(pz,dfhj)
    Dim jh1 As new List(of DataRow)
    Dim jh2 As new List(of DataRow)
    jh1 = t1.Select("借方 is not null" & " and 借方 <> 0 " & " And 凭证号 = '" & pz & "'","_sortkey")
    jh2 = t1.Select("贷方 is not null" & " and 贷方 <> 0 " & " And 凭证号 = '" & pz & "'","_sortkey")
    Dicrow.Add(pz,jh1)
    Dicrow1.Add(pz,jh2)
    
Next


For Each pz As String In pzh
        
    Dim hj As Double
    hj = dic(pz)
    For Each a As DataRow In Dicrow(pz)
        a("凭证号") = pz & "拆"
        For Each b As DataRow In Dicrow1(pz)
            
            Dim tr As DataRow = t1.AddNew()
            tr("一级科目名称") = a("一级科目名称")
            tr("借方") = a("借方") * b("贷方")/hj
            tr("对方科目") = b("一级科目名称")
            tr("凭证号") = pz
            b("凭证号") = pz & "拆"
            
        Next
        
    Next
    
    
Next


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107028 积分:544371 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/11/10 10:41:00 [只看该作者]

GetValues("凭证号","对方科目 is null")和Compute("sum(贷方)","凭证号 = '" & pz & "'")可以合并使用分组统计生成,下面部分貌似没有优化的可能

Dim t1 As DataTable = DataTables("Sheet3")
Dim b As New GroupTableBuilder("统计表1",t1)
b.Groups.AddDef("凭证号") '根据产品分组
b.Totals.AddDef("贷方","合计") '对数量进行统计
b.Filter = "对方科目 is null"
Dim dt As DataTable = b.Build(True) '生成统计表
For Each dr As DataRow In dt.DataRows
        
    Dim hj As Double
    hj = dr("合计")
    For Each a As DataRow In  t1.Select("借方 is not null And 借方 <> 0  And 凭证号 = '" & dr("凭证号") & "'","_sortkey")
        a("凭证号") = pz & "拆"
        For Each b As DataRow In t1.Select("贷方 is not null  and 贷方 <> 0  And 凭证号 = '" & dr("凭证号") & "'","_sortkey")
            
            Dim tr As DataRow = t1.AddNew()
            tr("一级科目名称") = a("一级科目名称")
            tr("借方") = a("借方") * b("贷方")/hj
            tr("对方科目") = b("一级科目名称")
            tr("凭证号") = pz
            b("凭证号") = pz & "拆"
            
        Next
        
    Next
    
    
Next

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2018/11/10 11:51:00 [只看该作者]

谢谢!1000多行数据,为何还要1秒多,如果10万行数据,那还了得?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
  发帖心情 Post By:2018/11/10 11:52:00 [只看该作者]

上面只有0.2秒,下面为什么耗时?

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107028 积分:544371 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/11/10 11:57:00 [只看该作者]

请上传具体实例测试

 回到顶部