Foxtable(狐表)用户栏目专家坐堂 → [求助]关于代码运行速度的优化


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

主题:[求助]关于代码运行速度的优化

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


加好友 发短信
等级:六尾狐 帖子:1287 积分:10362 威望:0 精华:1 注册:2018/1/20 12:40:00
[求助]关于代码运行速度的优化  发帖心情 Post By:2019/5/10 15:32:00 [只看该作者]

当月人天改变时,去计算这个任务的剩余人天的代码。

因为可能涉及数据库的行,所以需要用到sql命令,没办法用表达式。下面黄色标注的时耗时比较多的代码。现在只有4行加起来差不多要等1-2秒。这样的体验感太差了。。

不知道有没有优化的方法,或者时其他思路。

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

 e.DataRow.Save()         
              
                sum = DataTables("XMFP").SQLCompute("Sum(当月人天)","任务= '"& rw & "' and BH = '" & BH & "' ")
                drs = DataTables("XMFP").SQLS\ect("任务= '" & rw & "' and BH = '" & BH & "'")
                

                Dim sy As Double = e.DataRow("任务人天")- sum
                If DRS IsNot Nothing Then
                    For Each dr2 As DataRow In drs
                        dr2("剩余人天") = sy
                    Next
                End If

                drs2 = DataTables("XMFP").SE\ect("任务= '" & rw & "' and BH = '" & BH & "'")
                DataTables("XMFP").SQLUpdate(drs)
                If DRS2 IsNot Nothing Then
                    For Each dr3 As DataRow In drs2
                        Dim wz As Integer= Tables("XMFP").FindRow(dr3)
                        If wz >= 0 Then
                            Tables("xmfp").Rows(WZ).Load()
                        End If
                    Next
                End If


[此贴子已经被作者于2019/5/10 15:32:56编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/10 16:15:00 [只看该作者]

没办法

 

这句代码不能去掉的 DataTables("XMFP").SQLUpdate(drs)

 

重新加载代码,建议移除,重新load http://www.foxtable.com/webhelp/scr/2914.htm

 


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


加好友 发短信
等级:六尾狐 帖子:1287 积分:10362 威望:0 精华:1 注册:2018/1/20 12:40:00
  发帖心情 Post By:2019/5/10 18:14:00 [只看该作者]

那要选择刚加载进来的行,如何实现呢,只能通过for each 去找吗。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/5/10 19:05:00 [只看该作者]

以下是引用81538475在2019/5/10 18:14:00的发言:

那要选择刚加载进来的行,如何实现呢,只能通过for each 去找吗。

 

是的,没办法


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


加好友 发短信
等级:六尾狐 帖子:1287 积分:10362 威望:0 精华:1 注册:2018/1/20 12:40:00
  发帖心情 Post By:2019/5/16 18:17:00 [只看该作者]

想到了一个比较好的解决方案,分享一下。
未加载进来的数据使用SQLReplaceFor 直接写入数据库

   Dim cnt As Integer = DataTables("XMFP").SQLReplaceFor("剩余人天",sy,"任务= '" & rw & "' and BH = '" & BH & "'",True)
然后内部已经加载的表格使用se\ect 与数据库的数据同步,这样就不用把变动的行重新读取了。因为我这里重新读取涉及到很多事情,比如说要重新排序,要把这个重新读取的行挪到原来位置之类的事情。效率很低。
 Dim rs As List(of DataRow)=DataTables("xmfp").Select("任务= '" & rw & "' and BH = '" & BH & "'")
 For Each r0 As DataRow In rs
                    r0("剩余人天") = sy
 Next


 回到顶部