基准VBA代码

什么被认为是最准确的基准VBA代码(在我的情况下,我在Excel中testing代码)? 除了下面的2之外,还有其他的用于testing代码的技术吗?如果是,那么这个方法的优缺点是什么?

这里有两种stream行的方法。

第一: 计时器

Sub TimerBenchmark() Dim benchmark As Double benchmark = Timer 'Do your code here MsgBox Timer - benchmark End Sub 

Tick (我认为这是最准确的):

 Option Explicit Private Declare Function GetTickCount Lib "kernel32" () As Long Sub TickBenchmark() Dim Start As Long Dim Finish As Long Start = GetTickCount() 'Do your code here Finish = GetTickCount() MsgBox CStr((Finish - Start) / 1000) End Sub 

下面的代码使用比Excel更精确的窗口函数。 它来自http://msdn.microsoft.com/en-us/library/aa730921.aspx#Office2007excelPerf_MakingWorkbooksCalculateFaster 。 同一页面还包含一些关于提高Excel 2007性能的重要提示。

 Private Declare Function getFrequency Lib "kernel32" _ Alias "QueryPerformanceFrequency" (cyFrequency As Currency) As Long Private Declare Function getTickCount Lib "kernel32" _ Alias "QueryPerformanceCounter" (cyTickCount As Currency) As Long Function MicroTimer() As Double 'Returns seconds. Dim cyTicks1 As Currency Static cyFrequency As Currency MicroTimer = 0 ' Get frequency. If cyFrequency = 0 Then getFrequency cyFrequency ' Get ticks. getTickCount cyTicks1 ' Seconds If cyFrequency Then MicroTimer = cyTicks1 / cyFrequency End Function 

有趣的问题。 这不是一个完整的答案,但这是太长,不能发表评论。
我使用的是这种程序:

 Option Explicit Public Time As Double Sub Chrono() If Time = 0 Then Time = Now() Else MsgBox "Total time :" & Application.Text(Now() - _ Time, "mm:ss") & "." 'or whatever if not a msgbox Time = 0 End If End Sub 

这样,你可以把你的代码放在任何你想要的地方,只需要调用它两次(例如):

 If C_DEBUG Then Call Chrono 

在你想testing的部分代码的开始和结尾。

然而,我会说没有真正的“准确”的方法,因为它也取决于您的计算机上运行的是什么。 我会说这些方法将主要帮助告诉哪些代码比另一个更好

任何测量都将是嘈杂的,所以如果你想要精确的话,多次重复测量并平均结果。

专业的Excel开发包含一个dll实用程序PerfMon ,我更喜欢它的准确性,因为它可以很容易地插入整个代码与几个菜单点击