Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共5 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:添加5000条记录耗时运行13分钟,本代码正常吗?

1楼
xxcwdlwgo 发表于:2025/3/28 11:28:00
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

2楼
xxcwdlwgo 发表于:2025/3/28 12:13:00
找到问题了,多了一个save()
3楼
有点蓝 发表于: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倍以上
4楼
xxcwdlwgo 发表于:2025/3/28 12:24:00
好的,明白,我再改进一下代码,谢谢
5楼
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,服务器吃不消。
共5 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .03906 s, 2 queries.