For ii = 0 To Form9.List1.ListCount - 1
str = Form9.List1.List(ii)
sz = Split(str, ",")
st = sz(0)
Form9.List1.ListIndex = ii
si(0) = st Mod 10
si(1) = (st \ 10) Mod 10
si(2) = (st \ 100) Mod 10
si(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
si(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
si(5) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)
si(6) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)
If Form9.Check1(0).Value = 1 Then mi(0) = si(1)
If Form9.Check1(1).Value = 1 Then mi(1) = si(5)
If Form9.Check1(2).Value = 1 Then mi(2) = si(0)
If Form9.Check1(3).Value = 1 Then mi(3) = si(4)
If Form9.Check1(4).Value = 1 Then mi(4) = si(2)
If Form9.Check1(5).Value = 1 Then mi(5) = si(3)
If Form9.Check1(6).Value = 1 Then mi(6) = si(6) For i = MSFlexGrid1.Rows - 1 To 1 Step -1
bb = MSFlexGrid1.TextMatrix(i, 1)
sii(0) = bb Mod 10
sii(1) = (bb \ 10) Mod 10
sii(2) = (bb \ 100) Mod 10
sii(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
sii(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
ww(10) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)
ww(11) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)
ww(0) = fq(bb)
ww(2) = fq(bb) - (ww(3) - fq(bb))
ww(1) = fw(bb)
ww(3) = si(0) + si(1) + si(2)
ww(4) = si(3) - si(4)
ww(5) = ww(3) - si(3) - si(4)
ww(6) = si(3) + ww(5) - si(4)
If Form9.Option1(2) = True And Form9.Option2(1) = True Then
fff = False
For dd = 0 To 6
For j = dd + 1 To 6 For n = j + 1 To 6
If Form9.Check1(dd).Value = 1 And Form9.Check1(j).Value = 1 And Form9.Check1(n).Value = 1 Then
d = ww(dd) <> mi(dd)
c = ww(j) <> mi(j)
k = ww(n) <> mi(n)
b = Not (d Or c Or k) If b And Form9.Check1(dd).Value Then fff = True
End If
Next
Next
Next If fff = False Then
MSFlexGrid1.RemoveItem i
End If
End If
Next
Next
这5个循环,导致运算慢,该如何优化或减少循环
str = Form9.List1.List(ii)
sz = Split(str, ",")
st = sz(0)
Form9.List1.ListIndex = ii
si(0) = st Mod 10
si(1) = (st \ 10) Mod 10
si(2) = (st \ 100) Mod 10
si(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
si(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
si(5) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)
si(6) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)
If Form9.Check1(0).Value = 1 Then mi(0) = si(1)
If Form9.Check1(1).Value = 1 Then mi(1) = si(5)
If Form9.Check1(2).Value = 1 Then mi(2) = si(0)
If Form9.Check1(3).Value = 1 Then mi(3) = si(4)
If Form9.Check1(4).Value = 1 Then mi(4) = si(2)
If Form9.Check1(5).Value = 1 Then mi(5) = si(3)
If Form9.Check1(6).Value = 1 Then mi(6) = si(6) For i = MSFlexGrid1.Rows - 1 To 1 Step -1
bb = MSFlexGrid1.TextMatrix(i, 1)
sii(0) = bb Mod 10
sii(1) = (bb \ 10) Mod 10
sii(2) = (bb \ 100) Mod 10
sii(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
sii(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
ww(10) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)
ww(11) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)
ww(0) = fq(bb)
ww(2) = fq(bb) - (ww(3) - fq(bb))
ww(1) = fw(bb)
ww(3) = si(0) + si(1) + si(2)
ww(4) = si(3) - si(4)
ww(5) = ww(3) - si(3) - si(4)
ww(6) = si(3) + ww(5) - si(4)
If Form9.Option1(2) = True And Form9.Option2(1) = True Then
fff = False
For dd = 0 To 6
For j = dd + 1 To 6 For n = j + 1 To 6
If Form9.Check1(dd).Value = 1 And Form9.Check1(j).Value = 1 And Form9.Check1(n).Value = 1 Then
d = ww(dd) <> mi(dd)
c = ww(j) <> mi(j)
k = ww(n) <> mi(n)
b = Not (d Or c Or k) If b And Form9.Check1(dd).Value Then fff = True
End If
Next
Next
Next If fff = False Then
MSFlexGrid1.RemoveItem i
End If
End If
Next
Next
这5个循环,导致运算慢,该如何优化或减少循环
Dim obj As MyClass
Set obj = New MyClass ● 尽可能地使用整型操作符 比如:为了表示除法运算,请使用,而不是/。
● 判断空字符串 判断空字符串的常用方法是使用下面的语句:If my_string = "" Then... ,但是请采用另外一种方法,就是判断字符串的长度是否为0,这要比前者运行快,代码是: If Len(my_string) = 0 Then ... 。 ● 使用With命令引用多次使用的对象 这要比在每条语句中都完整地引用对象名称执行速度快许多! ● 少有字符串操作函数 尽可能少地使用字符串操作函数,它们运行很慢。 ● 定制Select Case语句 Select Case是处理多重条件判断的语句,请将经常要用到的选择排列在前面的选项,以增加该选项提前被选择命中的机会。 ● 尽可能的使用by ref参数调用函数和子程序 ● 将从不需要的表单设置为nothing 如果有许多要标明的表单,采用这个策略,将节省内存并减少运行时间。如果只有少数几个表单,请将它们全部装载进内存并隐藏之,这样将在随后的使用中速度更快。 ● 预想一下程序的速度 对程序的运行速度进行想象是非常重要的,设想一下点击按钮后,等待10秒钟。这将是一个非常长的时间!请添加一个进程条显示程序的进展情况,用户就不会感到等待。 ● 使用mid$函数而不是mid 如果需要执行许多字符串/文件操作,请使用mid$(以及trim$等等)函数而不是mid。因为后者将数据类型看作是variant 而不是 string,速度将慢3倍。 ● 尽快显示启动表单 尽快地显示启动表单可以使程序看起来很快。在表单的Load事件中使用Show命令,从而在执行长时间的启动计算工作前就能显示出程序界面。 ● 尽可能地在Form_Load事件中放置少量的代码 ● 使用splash技术过渡中间操作 如果初始化的表单要运行很长时间,请先立即显示一个splash画面,然后在初始表单完全装载后,再去除它。关于如果创建不同种类splash画面的资料,请查阅Advanced Visual Basic Techniques。 ● 在模块中将子程序分组 当一个程序调用另外一个程序时,另外的程序所在的模块将被装载。如果一个程序需要调用多个不同模块中的程序,那么所有的这些模块都要被装载。因此,将所有相关的程序放置在一个模块中,就可以实现一次装载。 ● 不要浪费内存 有时,利用更多的内存可以使程序变快,但是有时却不然。在实际中,如果给程序分配了它不能适应的过多内存,就会严重地影响程序速度。 ● 设置AutoRedraw为False 为了节省内存的使用,请将AutoRedraw设置为False。如果设置为True,对于复杂的绘图操作时,刷新屏幕的速度将很快。 ● 设置ClipControls为False ● 使用Moveto组件替代设置Left和Top属性 ● 隐藏正在修改的控件 当需要修改一系列空间的外观属性值时,请先将此控件执行隐藏操作。完成修改工作后,再使之变为可见。 ● 使用临时变量引用多次使用的复杂表达式 比如,需要设置对象SelectedEmployee.NextOfKin.HomeInformation.Address几个属性的数值,请不要多次引用这个长长的表达式,请使用: Dim addr As AddressInfo Set addr = SelectedEmployee.NextOfKin.HomeInformation.Address
addr.Street = txtStreet.Text
addr.City = txtCity.Text
addr.State = txtState.Text
addr.Phone = txtPhone.Text ● 缓存多次使用的属性值 如果程序需要多次引用txtLastName.Left的值,请将数值保存在变量中,然后引用这个变量。变量的存取要比属性值的存取在速度上快很多。 ● 使用Line (x1, y1)-(x2, y2), , B来绘制一个box,而不要画4次。 ● 尽可能地使用Image控件替代PictureBoxes Image控件消耗较少的内存。 ● 使用Frame控件包容其他控件,不要使用PictureBoxes控件做同等工作。前者消耗内存较少。 ● 使用控件数组 对于不很重要的控件,请使用控件数组来引用它们。比如,许多表单都包含许多label,请将它们都放入一个控件数组中。一个包含10个控件的控件数组要比10个单独的控件占用更少的内存。 ● 使用定时器在后台执行长时间、低级别的运算工作。 ● 使用注释,并命名富有含义的变量。 详细的注释、富有含义的变量名以及空白行,不会增加编译程序的长度,反而能大大地提高程序的可读性。 ● 消除掉不使用的变量和代码,因为保留它们将消耗内存。 ● 使用DoEvents语句 使用DoEvents语句从而运行运行在长时间的进程时可以让用户执行其他的操作。
天狼工作室
http://www.j2soft.cn/
Str = Form9.List1.List(ii)
sz = Split(Str, ",")
st = sz(0)
Form9.List1.ListIndex = ii
si(0) = st Mod 10
si(1) = (st \ 10) Mod 10
si(2) = (st \ 100) Mod 10
si(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
si(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
si(5) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)
si(6) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)
If Form9.Check1(0).Value = 1 Then mi(0) = si(1)
If Form9.Check1(1).Value = 1 Then mi(1) = si(5)
If Form9.Check1(2).Value = 1 Then mi(2) = si(0)
If Form9.Check1(3).Value = 1 Then mi(3) = si(4)
If Form9.Check1(4).Value = 1 Then mi(4) = si(2)
If Form9.Check1(5).Value = 1 Then mi(5) = si(3)
If Form9.Check1(6).Value = 1 Then mi(6) = si(6)
NextFor ii = 0 To Form9.List1.ListCount - 1
For i = MSFlexGrid1.Rows - 1 To 1 Step -1
bb = MSFlexGrid1.TextMatrix(i, 1)
sii(0) = bb Mod 10
sii(1) = (bb \ 10) Mod 10
sii(2) = (bb \ 100) Mod 10
sii(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
sii(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
ww(10) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)
ww(11) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)
ww(0) = fq(bb)
ww(2) = fq(bb) - (ww(3) - fq(bb))
ww(1) = fw(bb)
ww(3) = si(0) + si(1) + si(2)
ww(4) = si(3) - si(4)
ww(5) = ww(3) - si(3) - si(4)
ww(6) = si(3) + ww(5) - si(4)
If Form9.Option1(2) = True And Form9.Option2(1) = True Then
fff = False
For dd = 0 To 6
For j = dd + 1 To 6
For n = j + 1 To 6
If Form9.Check1(dd).Value = 1 And Form9.Check1(j).Value = 1 And Form9.Check1(n).Value = 1 Then
d = ww(dd) <> mi(dd)
c = ww(j) <> mi(j)
k = ww(n) <> mi(n)
b = Not (d Or c Or k)
If b And Form9.Check1(dd).Value Then fff = True
End If
Next
Next
Next
If fff = False Then
MSFlexGrid1.RemoveItem i
End If
End If
Next
Next
sii(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
sii(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
这两句是关键所在,主要把这两句分解开做一下试试吧