以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 这段代码为何执行时长达17秒??? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=71397) |
-- 作者:lmlptj -- 发布时间:2015/7/10 15:46:00 -- 这段代码为何执行时长达17秒??? 求各位老师指点:代码的效率是不是太低了?应该修改哪部分?? 应用环境:临时增加一个统计表(不使用外部数据源),并对后台数据进行统计! 窗口加载事件代码如下: Dim t1 As Date = Date.Now Dim tj As new DataTableBuilder("统计") \'第1步:增加与测评表一致的各列 For Each c As Col In Tables("测评表").Cols If c.Name <> "pg" AndAlso c.Name <> "备注" Then If c.Name = "姓名" Then tj.AddDef(c.Name,Gettype(String),20) Else tj.AddDef(c.Name,Gettype(Integer)) End If End If Next \'第2步:增加总评列 Dim djs As List(of String) = DataTables("设置").GetValues("等级","等级>\'\'","_Identify") For Each dj As String In djs tj.AddDef("总评_" & dj,Gettype(Integer)) Next tj.Build() Tables("统计结果_统计表").DataSource = DataTables("统计") Dim Ww As String For Each c As Col In Tables("统计结果_统计表").ColS If c.Name <> "姓名" Then ww = ww & c.Name & "|35|" End If Next ww = "姓名|80|" & ww \'隐藏备注列 Tables("统计结果_统计表").SetColVisibleWidth(Ww) \'第3步:增加人员表姓名并统计各等级的测评结果 Dim t As Table = Tables("统计结果_统计表") t.StopRedraw Dim xms As List(of String) = DataTables("人员表").GetValues("姓名","姓名>\'\'","_Identify") For Each xm As String In xms Dim r As Row = t.AddNew r("姓名") = xm For Each c As Col In Tables("测评表").cols If c.Name <> "姓名" AndAlso c.Name <> "PG" AndAlso c.Name<> "备注" AndAlso c.Name.Contains("总评") = False Then r(c.Name) = DataTables("测评表").SQLCompute("count(姓名)","姓名 = \'" & xm & "\' and " & c.Name & " = True") End If Next Next \'第4步:统计总评 For Each r As Row In t.Rows Dim djj As List(of String) = DataTables("设置").GetValues("等级","等级>\'\'","_Identify") \'定义等级 Dim xmm As List(of String) = DataTables("设置").GetValues("项目","项目>\'\'","_Identify") \'定义项目 For Each dj As String In djj Dim sum As Integer = 0 \'必须定义为0,否则为累计以一下行的计算 For Each xm As String In xmm sum = sum + r(xm & "_" & dj) Next r("总评_" & dj) = sum Next Next \'第5步:对统计结果进行排序,设置表样式 t.Sort = "总评_" & djs(0) & " desc," & "总评_" & djs(1) & " desc," & "总评_" & djs(2) & " desc" Functions.Execute("表样式","统计") t.grid.styles.Normal.Border.Color = Color.SlateBlue \'风格线设置成深颜色 t.AllowEdit = False t.DataTable.Save t.ResumeRedraw \'Forms("主窗口").Controls("lab-提示").text = Nothing e.Form.Controls("Label1").text = "计算结束, 耗时: " & (Date.Now - t1).TotalSeconds & "秒" |
-- 作者:大红袍 -- 发布时间:2015/7/10 15:56:00 -- SQLCompute 改成 Compute 测试是否变快。
变快的话,就把DataTables("测评表")全部加载出来,用Compute。 |
-- 作者:lmlptj -- 发布时间:2015/7/10 16:10:00 -- 以下是引用大红袍在2015/7/10 15:56:00的发言:
SQLCompute 改成 Compute 测试是否变快。
变快的话,就把DataTables("测评表")全部加载出来,用Compute。 DataTables("测评表")没有全部加载,所以用了SqlCompute的方法!!此小程序主要是学习分页加载之目的。 |
-- 作者:大红袍 -- 发布时间:2015/7/10 16:24:00 -- 改成compute,如果变快,就一次性加载所有数据,不用重复用SqlCompute |
-- 作者:lmlptj -- 发布时间:2015/7/10 16:58:00 -- 能快很多!!谢谢指导! |