Foxtable(狐表)用户栏目专家坐堂 → [求助]代码怎么优化下,SQL中执行1秒完成,窗口中执行很慢


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

主题:[求助]代码怎么优化下,SQL中执行1秒完成,窗口中执行很慢

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107455 积分:546554 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/7 21:58:00 [显示全部帖子]

dt = cmd.ExecuteReader
tbd.removefor("")
'进度条相关设置-------------------------------------------------------------------↓
Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
p.Maximum = dt.DataRows.Count '设置最大值
p.Minimum = 0 '设置最小值
'查询到的数据赋值----------------------------------------------------------------
For each dr as datarow in dt.DataRows
    Dim tbdr As DataRow = tbd.addnew
    For Each tbc As DataCol In tbd.DataCols
        tbdr(tbc.Name) = dtr(tbc.Name)
    Next
    'tbdr.Save
    If i Mod 100 = 0 Then
        p.Value = i '当前值为已经完成的行数
    End If
Next
'设置数值列数字格式-------------DataTables("单位成本")如果是主表,直接在列属性设置即可,完全没有必要使用代码设置-----------------------------------------------------↓
For Each tbc1 As DataCol In tbd.DataCols
    If tbc1.IsNumeric Then
        tbc1.SetFormat("0.0")
    End If
Next
……

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


加好友 发短信
等级:超级版主 帖子:107455 积分:546554 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/7 22:59:00 [显示全部帖子]

这个代码的计算速度不可能和SQL执行一样的。逐行填充,并且还加上进度。不加进度可以提高30%速度,但是逐行填充就没有办法了。反正都是清空在填充,还不如直接使用Fill,或者直接使用sql填充然后再加载

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


加好友 发短信
等级:超级版主 帖子:107455 积分:546554 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/8 8:49:00 [显示全部帖子]

百度一下“insert into select”的用法:https://www.baidu.com/baidu?word=insert+into+select

如果使用代码,可以考虑专门建个项目放到服务器运行,在半夜定时执行一些费时的统计操作,然后把统计结果保存下来。我认识的一个的经销商系统就是这样处理的,每天2点左右进行日结并上报数据。

 回到顶部