为什么Excel VBA会随机增加16毫秒执行时间

时间:2013-09-13 00:55:20

标签: excel-vba vba excel

我有一些Excel VBA代码可以运行多次迭代。 每次迭代基本上计算一个数组,直到达到目标,通常是大约8或6次尝试 问题是我需要运行几百次并且系统太慢了。

首先我计算了达到目标需要多少时间:通常大约16毫秒。 然后我计时每个循环,我得到的通常是他们的时间在0ms(非常快),除了一次16ms。 然后我重复了几次(CTRL + ALT + F9)而没有任何变化,并且需要16ms的循环变化(有时是第2次,有时是第5次等等)

顺便说一句,有时它是15ms ...

所以我理解这是一个多任务处理系统,但是有什么方法可以使这种运行更加一致吗?

作为参考,这是执行时间的代码:

      While (Abs(Y - Me.Model.Tjref) > 0.5) And (Count < 100)
        Count = Count + 1
t(Count) = GetTickCount
        If Y > x Then ' left condition
            X1 = x
            Y1 = Y
        Else                ' right condition
            X2 = x
            Y2 = Y
        End If
        x = (X1 + X2) / 2
        Me.Model.Tjref = x
        Y = Me.Model.Tjmax
 t(Count) = GetTickCount - t(Count)
 t1 = t1 + t(Count)
    Wend
 MsgBox t(1) & " " & t(2) & " " & t(3) & " " & t(4) & " " & t(5) & " " & t(6) & " " & t(7) & " " & t(8) & " " & t(9) & " " & t(10) & " tot: " & t1

然而,实际的计算时间很长,分为几类......

我并不担心16毫秒,但是当我在这16毫秒的时间内多次运行时,重新计算一张表就会有10秒钟... 谢谢你的帮助!!!!!!

2 个答案:

答案 0 :(得分:3)

并非您的代码需要额外的时间,GetTickCount的分辨率大约为10到16毫秒。您只能获得此值的倍数的时间值。

请参阅MSDN article here

答案 1 :(得分:0)

使Excel.exe成为实时优先级并再次测试(这将影响代码运行时的系统响应):

enter image description here