代码优化问题:
Dim Arys As List(Of String())
Arys = DataTables("试验临时数据").GetValues("来源|有效序") '列名用符号|分割
'注意循环变量是字符型数组,所以类型是String(),而不是String
For Each Ary As String() In Arys
'Output.Show(Ary(0) & "|" & Ary(1))
Dim cnt As Integer
Dim ly As String
Dim yx As Integer
ly = Ary(0)
yx = Ary(1)
cnt = DataTables("试验临时数据").Compute("Count([编号])", "[来源] = '" & ly & "' And [有效序] = '" & yx & "' And 结果 = '合格'")
'Output.Show(Ary(0) & "|" & Ary(1) & "|" & cnt)
Dim drs As List(Of DataRow)
drs = DataTables("试验临时数据").Select("[来源] = '" & ly & "' And [有效序] = '" & yx & "'")
For Each dr As DataRow In drs
dr("合格数量") = cnt
Next
Next
本段代码相当耗费时间 执行需要27秒(处理4000多条数据)
经查帮助:
是因为以下原因。
现在我总结一下,符合以下三个条件,会出现效率低下的情况:
1、用For语句遍历某个表。
2、遍历过程中会用Find或Select查询此表,或者用Compute方法统计此表。
3、遍历过程中会大量修改此表中某些行的值,被修改的行数越多,对于性能影响越大,如果被修改的行数很少,则几乎没有影响。
那么代码 该如何改造成类似的:
Dim Dic As new Dictionary(of DataRow, Integer)
Dim v As Double
For Each dr As DataRow In DataTables("表A").DataRows
v = DataTables("表A").Compute("Count(第二列 )", "第二列 = " & dr("第一列"))
dic.Add(dr, v)
Next
For Each dr As DataRow In dic.Keys
dr("第四列") = dic(dr)
Next
另一个问题 既然编写帮助时以发现了这样的问题,为什么 后面的帮助 给出的代码示例,全部是没有规避该原则的代码示例呢?
既然已经发现问题,再给出代码示例时,最好符合该原则,代码使得上述2、3项不再出现在同一个遍历语句中,而是在不同的遍历语句中出现。