VBA中For的结束值在不同赋值方式下的耗时

概述

在设置For的开始和结束值时,往往会使用公式,即需要计算才能得到值。但For会不会每次循环都计算一次结束值呢,那岂不是很浪费时间?这就需要来测试一下。

测试速度的代码

Private Declare Function QueryPerformanceCounter Lib "KERNEL32" (lpPerformanceCount As Currency) As Long
Private Declare Function QueryPerformanceFrequency Lib "KERNEL32" (lpFrequency As Currency) As Long

Private m_Frequency   As Currency
Private m_Start       As Currency
Private m_Now         As Currency
Private m_Available   As Boolean

Sub TestSpeet()

m_Available = (QueryPerformanceFrequency(m_Frequency) <> 0)
If Not m_Available Then
Debug.Print "Performance Counter not available"
End If

Dim i As Long
Dim a(1000) As Long, b As Long, c(1) As Long

QueryPerformanceCounter m_Start

For i = 1 To 1000000 Step 1
    ' 下面的代码块中选一个执行
    ' --------------- 循环时求值 ---------------
    For j = 1 To UBound(a) Step 1
    Next j
    ' --------------- 循环前求值 ---------------
    b = UBound(a)
    For j = 1 To b Step 1
    Next j
    ' --------------- 常数 ---------------
    For j = 1 To 1000 Step 1
    Next j
Next i

QueryPerformanceCounter m_Now

Elapsed = 1000 * (m_Now - m_Start) / m_Frequency
Debug.Print Format(Elapsed, "#.0000")
End Sub

测试结果

测试结果的时间单位是毫秒。

测试顺序循环时求值循环前求值常数
1360.2659360.0748359.8621
2360.0173360.4622360.0325
3360.0655359.9629359.6281
4359.8392359.9041359.7904
5360.2690360.3178360.0977
6360.2365360.2665359.7168
7360.1620359.8445360.4467
8360.1632360.2971360.3351
9360.1063359.9023360.1060
10359.7458360.6394365.0117

结论

所以可以尽情把For的起止值设为公式,因为这并不比特地定义一个变量来存放要慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值