以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 添加5000条记录耗时运行13分钟,本代码正常吗? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=196098) |
-- 作者:xxcwdlwgo -- 发布时间:2025/3/28 11:28:00 -- 添加5000条记录耗时运行13分钟,本代码正常吗? For Each cc As String In Split(lst.Value, ",") cmd.CommandText = "SEL ECT * F rom {图定列车} where 车次= \'" & cc & "\'" dt = cmd.ExecuteReader() \' 遍历日期范围 For j As Integer = 0 To ts.Days - 1 Dim currentDate As Date = sd.Value.AddDays(j) \' 添加新记录 For Each dr1 As DataRow In dt.DataRows Try Dim dr2 As DataRow = DataTables("列车计划").AddNew() For i As Integer = 0 To Cols1.Length - 1 dr2(Cols2(i)) = dr1(Cols1(i)) Next dr2("日期") = currentDate dr2("序号") = dr1("序号") \' 将图定列车的序号赋值给列车计划的序号 dr2("停开") = "开行" dr2.Save() Catch ex As Exception MessageBox.Show("添加记录时发生错误: " & ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error) Return End Try Next \' 更新进度条 p.Value += 1 Application.DoEvents() \' 刷新界面 Next Next |
-- 作者:xxcwdlwgo -- 发布时间:2025/3/28 12:13:00 -- 找到问题了,多了一个save() |
-- 作者:有点蓝 -- 发布时间:2025/3/28 12:14:00 -- 这个耗时应该是正常的。假设是lst集合有5000个,ts.Days不知道有几天,再乘于5000就不止5000条记录了 1、cmd会执行5000次,后台查询一向都费时间 2、dr2.Save()会保存【lst.count * ts.Days】次。考虑去掉这一句,到最后直接保存一次DataTables("列车计划").save即可 3、更新进度条的Application.DoEvents()操作会导致程序处理变慢,大概会慢10倍以上
|
-- 作者:xxcwdlwgo -- 发布时间:2025/3/28 12:24:00 -- 好的,明白,我再改进一下代码,谢谢 |
-- 作者:lur320 -- 发布时间:2025/3/28 12:45:00 -- cmd.CommandText = "SEL ECT * F rom {图定列车} where 车次= \'" & cc & "\'" 这里改成 IN。 这样查询1次,存在临时建立的datatable里面。后面再从这个临时的datatable里面查询。 两个FOR连用,是灾难,要避免。 application.do events 不用每次就进行,如果一定要刷新,可以在第一层for 里面刷新。 在for里面save,服务器吃不消。
|