Foxtable(狐表)用户栏目专家坐堂 → [求助]代码简化后运行时间太长?


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

主题:[求助]代码简化后运行时间太长?

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
[求助]代码简化后运行时间太长?  发帖心情 Post By:2021/2/23 20:38:00 [显示全部帖子]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:高中期末成绩统计程序测试1.rar

代码简化后运行时间太长,要98秒,简化前只需7秒,但运算结果一样。不知代码是否存在问题?请指教,谢谢!
[此贴子已经被作者于2021/2/23 21:48:43编辑过]

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/23 21:51:00 [显示全部帖子]

但不知如何修改代码,请指教。谢谢!

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/23 22:59:00 [显示全部帖子]

问题确实多,待我慢慢解决,如遇困难再请教。谢谢!

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/24 21:02:00 [显示全部帖子]

只是建表和平均分、标准差的计算就耗时160多秒时间,估计是这个代码存在问题,我实在找不到原因,请指教。谢谢!
Dim Values() As String = {"总分"}
Dim s1() As String = New String() {"总分"}
Dim tjnj As String = 2018
Dim lm1s() As String = {"序号","部别","年级","科目"}
Dim lm2s() As String = {"参考人数","平均分","标准差"}
Dim dhs() As String = {"重点A","本科A","专科A"}
Dim lm3s() As String = {"平均分","标准差","平均分之和","标准差之和","目标","分数线","有效分"}
For Each Value As String In Values
    '建表
    Dim dtb As New DataTableBuilder( value & tjnj &  "级有效分")
    For Each lm1 As String In lm1s
        dtb.AddDef( lm1 ,Gettype(String),8)
    Next
    For Each lm2 As String In lm2s
        dtb.AddDef( lm2 ,Gettype(Double))
    Next
    For Each dh As String In dhs
        For Each lm3 As String In lm3s
            dtb.AddDef( dh & lm3 ,Gettype(Double),"", dh & "及以上_ "& lm3 &"")
        Next
    Next
    dtb.Build()    
    For Each bm As DataTable In DataTables
        If bm.name <> "成绩库" AndAlso bm.Name <> "校名设置" AndAlso bm.Name <> "目标设置" AndAlso bm.Name <> "名册" AndAlso bm.Name <> "信息表" AndAlso bm.Name <> "原始名册"AndAlso bm.Name <> "基数" AndAlso bm.Name <> "调用人数" AndAlso bm.Name <> "赋分"
            Dim kemu_list() As String = {"语文","数学","英语","物理","历史","选科"}
            For Each kemu As String In kemu_list
                For Each bubie As String In DataTables("成绩库").GetValues("部别","年级 = '" & tjnj & "'")
                    Dim dr As DataRow
                    dr = DataTables(bm.name).addnew()
                    dr("科目") = kemu
                    dr("年级") = tjnj
                    dr("部别") = bubie
                    dr("参考人数") = DataTables("成绩库").Compute("count(" & dr("科目") & ")", "[部别] = '" & dr("部别") & "' And [年级] = '" & dr("年级") & "'")
                   '平均分\标准差                     
                    dr("平均分") = Format(DataTables("成绩库").Compute("Avg(" & dr("科目") & ")", "[部别] = '" & dr("部别") & "' And [年级] = '" & dr("年级") & "'"),"0.00")
                    Dim jdr As DataRow = DataTables("目标设置").Find("部别 = '" & dr("部别") & "' And 年级 = '" & dr("年级") & "'And 类别 = '区合计'")
                    For Each dh As String In dhs
                        For Each lm3 As String In lm3s
                            For j As Integer = 0 To dhs.length - 1
                                dr(dhs(j) & "目标") = jdr(dhs(j)) '目标取值填充
                                Dim tj As String = Left(bm.name,2) & "排名"
                                Dim tj1 As String = Left(bm.name,2)
                                tj1 = Left(bm.name,2)
                                Dim pm As Double = DataTables("成绩库").Find(" " & tj & " = '" & jdr(dhs(j)) & "' And [部别] = '" & dr("部别") & "' And [年级] = '" & dr("年级") & "'")(tj1) '排名
                                dr(dhs(j) & "分数线") = DataTables("成绩库").Compute("Max(" & tj1 & ") ", " " & tj1 & " = '" & pm & "'And [部别] = '" & dr("部别") & "' And [年级] = '" & dr("年级") & "'")
                                dr(dhs(j) & "平均分") = Format(DataTables("成绩库").Compute("Avg(" & dr("科目") & ")", "[部别] = '" & dr("部别") & "' And [年级] = '" & dr("年级") & "'And [总分] >=  '" & pm & "' "),"0.00")
                                Tables("成绩库").Filter = " 部别 = '" & dr("部别") & "' And 年级 = '" & dr("年级") & "'"
                                Dim p As Integer = Tables("成绩库").Cols("" & dr("科目") & "").Index '指定位置的列
                                Dim rs As Integer = Tables("成绩库").Rows.Count -1 '指定位置的行
                                dr("标准差") =  Tables("成绩库").Aggregate(AggregateEnum.Std, 0, p, rs, p)
                                dr(dhs(j) & "标准差") = Format(Tables("成绩库").Compute("StDev(" & dr("科目") & ")", "[部别] = '" & dr("部别") & "' And [年级] = '" & dr("年级") & "'And [总分] >=  '" & pm & "'"),"0.00")
                                Tables("成绩库").Filter = ""
                                Tables("总分"& tjnj &"级有效分").Sort = "部别"
                            Next
                        Next
                    Next
                    DataTables("总分"& tjnj &"级有效分").DeleteFor("[参考人数] <= 0 ")
                    '序号填充
                    Dim tj2 As String = "序号"
                    Dim drs As List(Of DataRow) = DataTables("总分"& tjnj &"级有效分").Select("[年级] = '" & tjnj & "'", "部别")
                    For n As Integer = 0 To drs.Count - 1 '遍历所有行
                        drs(n)(tj2) = n  '设置排序
                    Next
                Next
            Next
        End If
    Next
Next
DataTables("成绩库").ResumeRedraw

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/25 10:54:00 [显示全部帖子]

在执行过程中执行表呈白板,好像死机了似的,运行结束后才显示。不知是哪句代码造成的?请指教。谢谢!

图片点击可在新窗口打开查看此主题相关图片如下:白板.png
图片点击可在新窗口打开查看


[此贴子已经被作者于2021/2/25 10:55:00编辑过]

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/25 11:29:00 [显示全部帖子]

代码执行前加:DataTables("成绩库").StopRedraw
代码执行后加:DataTables("成绩库").ResumeRedraw
还是不得行。

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/25 23:03:00 [显示全部帖子]

需最后显示移除(隐藏)“平均分之和”和“标准分之和”两列,代码:Tables( value & tjnj & "级有效分").Cols.Remove(dhs(j) & "平均分之和",dhs(j) & "标准差之和")
执行报错:
索引超出范围。必须为非负值并小于集合大小。
参数名: index
如何修改代码?请指教。谢谢!

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/26 11:15:00 [显示全部帖子]

谢谢!只能这样就行了:
Tables( value & tjnj & "级有效分").Cols.Remove(dhs(j) & "平均分之和")
Tables( value & tjnj & "级有效分").Cols.Remove(dhs(j) & "标准差之和")

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/27 16:57:00 [显示全部帖子]

请教:能否清除(或隐藏)红色单元格内容?
清除前
图片点击可在新窗口打开查看此主题相关图片如下:清除红色单元格.png
图片点击可在新窗口打开查看
清除后
图片点击可在新窗口打开查看此主题相关图片如下:清除红色单元格后.png
图片点击可在新窗口打开查看
谢谢!

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


加好友 发短信
等级:一尾狐 帖子:407 积分:3194 威望:0 精华:0 注册:2011/2/28 11:57:00
  发帖心情 Post By:2021/2/27 20:11:00 [显示全部帖子]

谢谢!

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