优化代码 降低CPU使用
下面这代码怎么了,一运行就占用40%多到50%的CPU,要如何优化,,,,
Private Sub delay(HaoMiao As Double) Dim t1 As Long t1 = timeGetTime '记下开始的时间 While (timeGetTime - t1) < HaoMiao DoEvents '让 windows 去处理其他事 WendEnd SubPrivate Sub yunxing() Dim x As Integer Dim rc As RECT For x = 1 To ListView1.ListItems.Count '延时,单位毫秒 delay ListView1.ListItems(x).ListSubItems(4) '第5列为 点击间隔 If ListView1.ListItems(x).ListSubItems(8) = "运行" Then '------------------------------ '分解 ListView1.ListItems(X).ListSubItems(7) 得出坐标 Dim s, xx, yy As String s = ListView1.ListItems(x).ListSubItems(7) s = Mid(s, 2, Len(s) - 2) xx = Left(s, InStr(s, ",") - 1) yy = Right(s, Len(s) - InStr(s, ",")) '------------------------------ If ListView1.ListItems(x).ListSubItems(6) = "按下左键" Then If ListView1.ListItems(x).ListSubItems(5) = "前台" Then GetWindowRect ListView1.ListItems(x).ListSubItems(3), rc SetCursorPos rc.Left + xx, rc.Top + yy mouse_event &H2, 0, 0, 0, 0 '按下鼠标左键 Else ppt = yy * &H10000 Or xx '鼠标坐标 PostMessage ListView1.ListItems(x).ListSubItems(3), &H201, 0&, ByVal ppt '按下鼠标左键 End If '------------------------- ElseIf ListView1.ListItems(x).ListSubItems(6) = "释放左键" Then If ListView1.ListItems(x).ListSubItems(5) = "前台" Then GetWindowRect ListView1.ListItems(x).ListSubItems(3), rc SetCursorPos rc.Left + xx, rc.Top + yy mouse_event &H4, 0, 0, 0, 0 '释放鼠标左键 Else ppt = yy * &H10000 Or xx PostMessage ListView1.ListItems(x).ListSubItems(3), &H202, 0&, ByVal ppt '释放鼠标左键 End If End If End If Next x End Sub
Private Sub delay(HaoMiao As Double) Dim t1 As Long t1 = timeGetTime '记下开始的时间 While (timeGetTime - t1) < HaoMiao DoEvents '让 windows 去处理其他事 Sleep 1 WendEnd Sub
[解决办法]
假设不加入Sleep 1,那么你的等待循环将以CPU能达到的最高速度来运行.
实际上这个循环仅仅是为了不断检测经过的时间是否达到设定的时间而已,不需要如此高的速度去检测,所以加入Sleep 1,将检测速度限制到每秒1000次以内,甚至可以用更高的Sleep时间,让检测速度进一步下降,比如Sleep 50,以不影响程序的响应为准.
由于这种方式会严重降低循环的执行速度,所以不适用于循环处理数据的情况,因为会严重降低性能.