说明:集合drs的记录数有32670条
二段代码很类似,但不知为什么第二段代码效率这么低下,老师帮我看看,谢谢!
以下代码执行完用了40分钟。
Dim Result As DialogResult
Result = MessageBox.Show("即将进行全表作业时间计算,是否执行?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
Dim t1 As Date = Date.Now
Dim sum As Double
Dim tp As TimeSpan
Forms("进度条独立窗口").Show '打开进度条独立窗口
Dim p As WinForm.ProgressBar = Forms("进度条独立窗口").Controls("ProgressBar") '定义进度条独立窗口中的进度条控件
Dim l As WinForm.Label = Forms("进度条独立窗口").Controls("Label1") '定义进度条独立窗口中的Lable控件
Dim drs As List(Of DataRow) = _dt工序合并表.SQLSelect("","","记录标记2") '按记录标记2排序以加快变量sum运算速度
If drs.Count > 0 Then
For i As Integer = 0 To drs.Count - 1
l.Text = "计算中,当前进度: " & i+1 & " / " & drs.Count
p.Maximum = drs.Count '设置最大值
p.Minimum = 0 '设置最小值
If i Mod 100 = 0 Then '每运算100条更新一次投料量进度条
p.Value = i '当前值为已经完成的行数
ElseIf i=drs.Count-1 '当i为最大值减1时
p.Value = drs.Count '当前值直接等于最大值
Forms("进度条独立窗口").Close
End If
If drs(i).IsNull("结束时间") Then
drs(i)("作业分钟数") = 0
Else
tp = drs(i)("结束时间") - drs(i)("起始时间")
If i = 0 Then
sum = _dt工序合并表.SQLCompute("Sum(重量)", "记录标记2 = '" & drs(i)("记录标记2") & "'" )
ElseIf drs(i)("记录标记2") <> drs(i-1)("记录标记2") Then
sum = _dt工序合并表.SQLCompute("Sum(重量)", "记录标记2 = '" & drs(i)("记录标记2") & "'" )
End If
drs(i)("作业分钟数") = tp.TotalSeconds()/60/sum * drs(i)("重量")
End If
Next
_dt工序合并表.SQLUpdate(drs)
End If
MessageBox.Show("完成全表作业时间计算!耗时: " & (Date.Now - t1).TotalSeconds & "秒,请不要频繁操作.", "提示",MessageBoxButtons.ok, MessageBoxIcon.Information)
End If
以下代码执行完用了21秒。
'库存标记生成模块
Dim Result As DialogResult
Result = MessageBox.Show("进行全表库存标记重算,大约耗时20秒钟,是否执行?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If Result = DialogResult.Yes Then
Dim t1 As Date = Date.Now
Dim drs As List(Of DataRow) = _dt工序合并表.SQLSelect("","", "卷号,起始时间") '指定母卷号计算
If drs.Count=1 Then
drs(0)("库存标记") = True
Else
For i As Integer = 1 To drs.Count - 1
Dim p As WinForm.ProgressBar '定义投料量进度条
Forms("进度条独立窗口").Show '打开投料量进度条独立窗口
p = Forms("进度条独立窗口").Controls("ProgressBar")
p.Maximum = drs.Count '设置最大值
p.Minimum = 0 '设置最小值
If i Mod 100 = 0 Then '每运算100条更新一次投料量进度条
p.Value = i '当前值为已经完成的行数
ElseIf i=drs.Count-1 '当i为最大值减1时
p.Value = drs.Count '当前值直接等于最大值
Forms("进度条独立窗口").Close
End If
If drs(i)("卷号").Contains(drs(i-1)("卷号")) Then
drs(i-1)("库存标记") = False
Else
drs(i-1)("库存标记") = True
End If
Next
drs(drs.Count-1)("库存标记") = True
End If
_dt工序合并表.SQLUpdate(drs)
MessageBox.Show("完成全表库存标记计算!耗时: " & (Date.Now - t1).TotalSeconds & "秒,请不要频繁操作.", "提示",MessageBoxButtons.ok, MessageBoxIcon.Information)
End If
[此贴子已经被作者于2015/10/18 19:50:22编辑过]