以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  这段代码执行时非常慢,有没有优化些方法?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=121524)

--  作者:hbfnmxb
--  发布时间:2018/7/8 21:00:00
--  这段代码执行时非常慢,有没有优化些方法?
在蓝版主的帮助下,完成了一个小小高考志愿查询筛选程序。在这里选感谢蓝版。有一个按钮代码在程序执行时非常慢,蓝版及各位老师看一下,还有没有化的方法,让其在执行的快一些。选谢谢各位版主及老师了。
选上图,看一下执行时间:

图片点击可在新窗口打开查看此主题相关图片如下:000.png
图片点击可在新窗口打开查看
代码如下:
e.Form.Controls("Label1").Text = "正在调入各年度最低分平均分及排名,请稍后..."
Application.DoEvents()
Dim timestart,timeend As Date
timestart=Date.now
Dim dt1 As DataTable = DataTables("年度院校提档线")
For Each ary As String() In dt1.GetValues("院校代码|文理分科|录取批次", "院校代码 is not null")
    Dim filter As String = "院校代码=\'" & ary(0) & "\' and 文理分科 = \'" & ary(1) & "\' and 录取批次 = \'" & ary(2) & "\'"
    Dim filter1 As String = filter & " And 录取年度 = \'2017\'"
    Dim filter2 As String = filter & " And 录取年度 = \'2016\'"
    Dim filter3 As String = filter & " And 录取年度 = \'2015\'"
    
    Dim fdr1 = dt1.find(filter1)
    If fdr1 IsNot Nothing Then
        dt1.ReplaceFor("乙年最低分", fdr1("最低分"), filter)
        dt1.ReplaceFor("乙年平均分", fdr1("平均分"), filter)
        dt1.ReplaceFor("乙年最低分排名", fdr1("最低分排名"), filter)
        dt1.ReplaceFor("乙年平均分排名", fdr1("平均分排名"), filter)
    End If
    
    Dim fdr2 = dt1.find(filter2)
    If fdr2 IsNot Nothing Then
        dt1.ReplaceFor("丙年最低分", fdr2("最低分"), filter)
        dt1.ReplaceFor("丙年平均分", fdr2("平均分"), filter)
        dt1.ReplaceFor("丙年最低分排名", fdr2("最低分排名"), filter)
        dt1.ReplaceFor("丙年平均分排名", fdr2("平均分排名"), filter)
    End If
    
    Dim fdr3 = dt1.find(filter3)
    If fdr3 IsNot Nothing Then
        dt1.ReplaceFor("丁年最低分", fdr3("最低分"), filter)
        dt1.ReplaceFor("丁年平均分", fdr3("平均分"), filter)
        dt1.ReplaceFor("丁年最低分排名", fdr3("最低分排名"), filter)
        dt1.ReplaceFor("丁年平均分排名", fdr3("平均分排名"), filter)
    End If
Next
e.Form.Controls("Label1").Text = "调入完毕."
timeend=Date.now
e.Form.Controls("Label1").text="耗时" & (timeend-timestart).TotalSeconds & "秒"
Messagebox.Show("调入完毕!")


--  作者:baicaocao
--  发布时间:2018/7/8 21:24:00
--  
这个三个find分开试试,就是三个循环语句并列,每年一个。看看执行速度是多少。。
另外如果可以的话,用sql中的存储语句试试。。应该能快不少。

--  作者:hbfnmxb
--  发布时间:2018/7/8 21:34:00
--  
原来是每年一个按钮,后来是合到一起的,每年一个的时候,也不是很快,因为要调试,所以没注意到这个细节,现在进一步
完善,所以才发现了这个问题,另外,老师说到的SQL中的存储语句是什么意思?怎么试?谢谢老师!

--  作者:hbfnmxb
--  发布时间:2018/7/9 8:48:00
--  
自己顶一下。
--  作者:有点甜
--  发布时间:2018/7/9 8:56:00
--  
做一个执行慢的例子发上来测试。执行了多久?你想优化成多快?
--  作者:hbfnmxb
--  发布时间:2018/7/9 9:42:00
--  
其它按钮几秒钟,这个432多秒,7分多鈡,我的意思如果有可以优化一下,快一点,如果没有这样就很好。非常感谢蓝版!!谢谢
--  作者:有点甜
--  发布时间:2018/7/9 14:02:00
--  
以下是引用hbfnmxb在2018/7/9 9:42:00的发言:
其它按钮几秒钟,这个432多秒,7分多鈡,我的意思如果有可以优化一下,快一点,如果没有这样就很好。非常感谢蓝版!!谢谢

 

做个例子发上来测试。不可能耗时这么久的。


--  作者:hbfnmxb
--  发布时间:2020/12/25 13:36:00
--  
老问题,如果一楼的公式,换成Select函数,可以吗?公式怎么写呢?谢谢老师!
--  作者:有点蓝
--  发布时间:2020/12/25 14:29:00
--  
请上传实例测试
--  作者:hbfnmxb
--  发布时间:2020/12/25 15:09:00
--  
因论坛附件限制,固更改了文件扩展名,老师下载附件后,直接去掉rar的扩展名,即可解压缩。谢谢老师,麻烦了!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:同表引用排名同位分公式执行慢求助.7z.rar