我的代码如下:
#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编译器是否优化了对无效的程序的调用?我该怎么知道?
答案 0 :(得分:1)
AFAIK VBA解释器很少或根本没有优化。如果在VBE调试模式下测试它,您可以看到执行跳转到“空”子。 但我认为额外的开销无论如何都会被VBA执行的其余部分淹没。
答案 1 :(得分:1)
将此评论从评论升级到答案:
“优化”包含单个,一位,二进制,布尔测试的过程有什么意义?你确定这代表了执行时间的重要部分吗?这种可能性很小。
在优化之前,总是进行一些分析,因此您不必浪费时间和担心代表执行时间的0.0001%的代码。
VBA没有原生探查器,但有第三方选项,其中一些是免费的。这是一个,伴随着一个有启发性的阅读:Profiling and Optimizing VBA By bruce mcpherson。 DuckDuckGo search也提供了很多其他线索。
所以,你原来问题的答案是:我不认为VBA会优化这样的程序,但我不完全确定,无论哪种方式都很可能完全无关紧要。在担心优化之前,总是做一些分析,这样你就可以明智地花时间。在分析之后,你几乎总会发现你认为减慢你的程序的速度实际上非常快,而其他东西就是罪魁祸首。