gpt4 book ai didi

vba - VBA 中哪个 if 语句执行速度更快?

转载 作者:行者123 更新时间:2023-12-02 19:08:21 25 4
gpt4 key购买 nike

在 VBA 中,以下哪一个 if 语句的性能更好?

上下文:我正在遍历一张工作表以查找条目。

if [condition1] and [condition2] and [condition3] then
*do something*
end if

if [condition1] then
if [condition2] then
if [condition3] then
*do something*
end if
end if
end if

我的直觉是第二个语句,因为它只需要在进行下一次迭代之前检查一个初始条件,但事实是这样吗?另外,有更好的方法吗?

最佳答案

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.

— Donald Knuth

假设所有条件都没有副作用,并且本质上可以归结为:

If True And True And False Then

那么您就考虑太多了,并且可能过度优化而没有任何有意义的性能提升。不要试图从代码中挤出每一纳秒,而是编写易于阅读、维护、调试和扩展的代码:如果代码中的任何地方存在性能瓶颈,那么它并不在这里。。 p><小时/>

Context: I'm iterating through a sheet looking for an entry.

看,遍历工作表查找条目 您的瓶颈。与工作表交互比与内存数组交互慢数百倍甚至数千倍。

所以,是的,因为你正在编写昂贵的代码,缺乏短路将会产生影响,但并不是因为短路更有效地利用 bool 逻辑 - 它将产生[潜在的显着]差异,因为您将有条件地避免昂贵的工作表读取

如果这听起来很矛盾,那么您没有明白我的观点:短路 bool 逻辑对已经很高效的代码的性能影响基本上是微不足道的

继续,尝试转储您正在迭代的 Range(您是否使用 ForFor Each 循环来执行此操作? There's a massive difference between the two ,具体取决于您正在执行的操作)转换为二维数组,然后使用 For 循环对其进行迭代并查找您的条目。我保证比通过分割条件来模拟短路所获得的任何效果都更显着的性能改进。

或者,也许重新评估您是否需要迭代任何内容。如果您正在寻找一个条目,并且根据您的数据的情况,您可以将“条件列”合并为一个并使用 Application.WorksheetFunction.Match 来无需编写任何循环或条件即可定位条目。

关于vba - VBA 中哪个 if 语句执行速度更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46667267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com