Native VBA编译器是否优化?

时间:2012-04-05 12:40:07

标签: vba optimization compiler-construction profiling compiler-optimization

我的代码如下:

#Const debuggingEnabled = False

Sub debugMessage(str As String)
    #If debuggingEnabled Then
        Debug.Print str
    #End If
End Sub

Sub doThings()
    debugMessage "test"   'Does this get optimised away, or must it be explicitly
                          'wrapped with `#If .. #End If` every time it's called
                          'if one is to avoid the jump and stack push/pop ops?
End Sub

Microsoft的VBA编译器是否优化了对无效的程序的调用?我该怎么知道?

2 个答案:

答案 0 :(得分:1)

AFAIK VBA解释器很少或根本没有优化。如果在VBE调试模式下测试它,您可以看到执行跳转到“空”子。 但我认为额外的开销无论如何都会被VBA执行的其余部分淹没。

答案 1 :(得分:1)

将此评论从评论升级到答案:

“优化”包含单个,一位,二进制,布尔测试的过程有什么意义?你确定这代表了执行时间的重要部分吗?这种可能性很小。

在优化之前,总是进行一些分析,因此您不必浪费时间和担心代表执行时间的0.0001%的代码。

VBA没有原生探查器,但有第三方选项,其中一些是免费的。这是一个,伴随着一个有启发性的阅读:Profiling and Optimizing VBA By bruce mcphersonDuckDuckGo search也提供了很多其他线索。

所以,你原来问题的答案是:我不认为VBA会优化这样的程序,但我不完全确定,无论哪种方式都很可能完全无关紧要。在担心优化之前,总是做一些分析,这样你就可以明智地花时间。在分析之后,你几乎总会发现你认为减慢你的程序的速度实际上非常快,而其他东西就是罪魁祸首。