本机 VBA 编译器是否优化?

问题描述 投票:0回答:2

我的代码如下:

#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 编译器是否优化了对不执行任何操作的过程的调用? 我怎样才能找到答案?

vba optimization profiling compiler-optimization
2个回答
1
投票

将其从评论升级为答案:

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

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

VBA 没有本机分析器,但有第三方选项,其中一些是免费的。这是其中之一,并附有一本具有指导意义的读物:分析和优化 VBA 作者:布鲁斯·麦克弗森DuckDuckGo 搜索 还提供了大量其他线索。

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.