Foxtable(狐表)用户栏目专家坐堂 → 请问下面的代码运行为何慢?


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

主题:请问下面的代码运行为何慢?

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


加好友 发短信
等级:狐神 帖子:5054 积分:13025 威望:0 精华:0 注册:2014/5/15 21:34:00
请问下面的代码运行为何慢?  发帖心情 Post By:2017/2/23 11:33:00 [只看该作者]

 大师:请问下面的代码如何优化,总共才50行遍列,为何要5秒钟才运行完?
Dim cm---d As Ne--w S-Q-L-Command  
    Dim dt As DataTable
    cmd.Con---necti
    cmd.Comm---andText = "SE-------LECT * From {zsjbsjcj} where zzzz2 = '表1'"
    dt = cm----d.----ExecuteReader()
    
    Dim tbkj As WinForm.Table = e.Form.Controls("Table1")
    Dim tb As Table
    tb = tbkj.Table
  

tb.DataTable.StopRedraw
    For Each r As DataRow In tb.DataTable.dataRows
        If r.IsNull("zcfzb1") = False Then
            r("zcfzb27") = dt.Compute("min(zzzz32)","zzzz4 = '" & trim(r("zcfzb1")) & "' and zzzz5 is null")  
            r("zcfzb9") = dt.Compute("min(zzzz21)","zzzz4 = '" & trim(r("zcfzb1")) & "' and zzzz5 is null")           
        End If
        If r.IsNull("zcfzb5") = False Then
            r("zcfzb28") = dt.Compute("min(zzzz32)","zzzz4 = '" & trim(r("zcfzb5")) & "' and zzzz5 is null")  
            r("zcfzb18") = dt.Compute("min(zzzz21)","zzzz4 = '" & trim(r("zcfzb5")) & "' and zzzz5 is null")   
        End If
    Next
    tb.DataTable.ResumeRedraw


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/23 12:04:00 [只看该作者]

 你这个表{zsjbsjcj}的数据肯定很多吧?计算一下耗时。

 

 如果是遍历行慢的话,你看看是否触发了datacolchanged事件。


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


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

谢谢!经测试,是datacolchanged事件影响,可否直接下面的代码暂停所有事件,不暂停单个事件,否则全局变量太多,头昏?

SystemReady = False
Try
'追加数据代码
Catch ex
As Exception
MessageBox.Show(
"追加数据失败")
End
Try
SystemReady =
True


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


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/2/23 14:17:00 [只看该作者]

 

你加上SystemReady,禁止触发事件,即可。

 


 回到顶部