Arrays 组合循环以改进运行时?

Arrays 组合循环以改进运行时?,arrays,optimization,runtime,Arrays,Optimization,Runtime,我很好奇访问数组中的每个项的成本是多少。假设我有密码 For( each item in an array) 'do thing1 Next item in array For( each item in same array) 'do thing2 Next item in array 将其写成 For( each item in an array) 'do thing1 'do thing2 Next ite

我很好奇访问数组中的每个项的成本是多少。假设我有密码

  For( each item in an array)
     'do thing1
   Next item in array

   For( each item in same array)
        'do thing2
    Next item in array
将其写成

  For( each item in an array)
     'do thing1
     'do thing2
   Next item in array
我有一大堆使用第一种方法的代码,我想知道是否值得尝试并结合一些东西。我知道第二种方法更容易阅读,但我想知道运行时是否受到影响。我知道可以在固定时间内访问数组中的内容,但访问两次是否需要两倍的时间


如果有区别的话,我正在用VBA编程。这个问题的答案会因您使用的语言而异吗?谢谢你的见解

它使用第一种方法在整个数组上迭代两次,使用第二种方法只迭代一次。在我看来,第二种方法实际上更干净,并且可能会改进运行时,因为它不会返回到列表的开头并再次遍历每个项目

编辑:
从一种语言到另一种语言,这并没有什么不同,通常最好将循环限制在尽可能少的迭代次数内。

显然,对于N个元素的数组,示例1需要Nx2读取,示例2只需要N个读取。
如果您的“do thing”使用每个项目,则组合的代码效率更高

将两个循环组合成一个循环的第二个示例将比单独运行两个循环的速度更快。然而,这两个例子都属于同一时间效率等级O(n),因为它们只相差一个常数。如果您需要更多关于此主题的帮助,请快速查看或搜索算法时间效率,这里有一些好文章可以帮助您更好地理解这一点。

就可维护性而言,只有您才能知道哪个更有意义

如果您的“do thing”所做的很少,并且如果您在采样时发现此代码中的程序计数器的时间>10%,那么它在性能方面很重要。 否则,它不会

如果是这样,那么根据我的经验,第一个选项可以提供更好的性能,因为编译器更有可能在一次迭代到下一次迭代时将内容保存在寄存器中,而不必在“thing1”和“thing2”之间保存和重新加载它们

在这种情况下,展开也会有所帮助。编译器可能能够展开,但我个人不喜欢“可能”