以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]关于代码运行速度的优化  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=134856)

--  作者:81538475
--  发布时间: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编辑过]

--  作者:有点甜
--  发布时间:2019/5/10 16:15:00
--  

没办法

 

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

 

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

 


--  作者:81538475
--  发布时间:2019/5/10 18:14:00
--  

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


--  作者:有点甜
--  发布时间:2019/5/10 19:05:00
--  
以下是引用81538475在2019/5/10 18:14:00的发言:

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

 

是的,没办法


--  作者:81538475
--  发布时间: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