性能差异:两个循环与一个循环

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

说我需要做两次i次操作。将两个操作放在一个for循环中或者创建两个单独的for循环并且每个循环中只有一个操作会更好地表现吗?

使用两个循环:

Sub Test()
    Dim i As Long

    Dim numbers() As Integer
    Dim numbersMultiplied() As Integer
    ReDim numbers(0 To 9) As Integer
    ReDim numbersMultiplied(0 To 9) As Integer

    For i = 0 To 9
        numbers(i) = i
    Next

    For i = 0 To 9
        numbersMultiplied(i) = numbers(i) * i
        Debug.Print numbersMultiplied(i)
    Next
End Sub

一个循环:

Sub Test2()
    Dim i As Long

    Dim numbers() As Integer
    Dim numbersMultiplied() As Integer
    ReDim numbers(0 To 9) As Integer
    ReDim numbersMultiplied(0 To 9) As Integer

    For i = 0 To 9
        numbers(i) = i
        numbersMultiplied(i) = numbers(i) * i
        Debug.Print numbersMultiplied(i)
    Next
End Sub

哪一个会更快?为什么?或者两种方式的表现是一样的?

excel vba performance excel-vba memory
1个回答
1
投票

您可以考虑以下参数并协助您的代码

  • 一些CPU包含硬件循环。此循环用作循环指令的硬件高速缓存,但这要求您的循环不超过一定数量的CPU指令。使用硬件循环可能会提高CPU性能。
  • 缓存友好代码可以提高性能。在您的代码中,单循环解决方案可以使用此迭代中缓存的值 - 它也可能位于寄存器中,这是更好的事情 - 这将减少内存访问时间并提高性能
  • 编译器优化设置也可以做你不能期望的事情。在某些情况下,2循环解决方案可能会生成与单循环操作相同的代码,因为优化程序将检测到它们是等效的。

这些只是一些需要考虑的事情。

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