1

My code is as follows:

#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

Does Microsoft's VBA compiler optimise away calls to procedures that do nothing? How can I find out?

4

2 回答 2

1

将此从评论升级为答案:

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

在优化之前,请务必进行一些分析,这样您就不会浪费时间并担心代表 0.0001% 执行时间的代码位。

VBA 没有本地分析器,但有第三方选项,其中一些是免费的。这是一个,并附有指导性阅读:分析和优化 VBA 布鲁斯·麦克弗森DuckDuckGo 搜索还提供了许多其他线索。

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

于 2012-04-06T12:20:36.823 回答
1

AFAIK VBA 解释器几乎没有优化。如果您在 VBE 调试模式下进行测试,您可以看到执行跳转到“空”子。但我原以为额外的开销无论如何都会被其余的 VBA 执行所淹没。

于 2012-04-05T13:40:47.377 回答