VBA中Long和String分别做布尔运算的耗时

概述

if做判断时,数据类型对速度的影响有多大?是否值得添加修改类型的代码?

测试速度的代码

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



Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByVal Source As Any, ByVal Length As Long)
Sub asdf()
Dim i As Long
For i = 1 To 1000 Step 1
    a = a & Chr(Int((90 - 65 + 1) * Rnd + 65))
Next i
Cells(1, 1) = a
Debug.Print a
End Sub

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

Dim a As Long, b As Long
a = 231312
b = 234324
Dim c As String, d As String
c = "as"
d = "er"
Dim e As String, f As String
e = "er"
f = "erf"

Dim i As Long
QueryPerformanceCounter m_Start
For i = 1 To 1000000 Step 1

' 以下三个 if 选一个执行
If a = b Then
End If
If c = d Then
End If
If e = f Then
End If

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

测试结果

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

测试序号long型长度相同的string型长度不同的string型
110.434240.887040.6155
210.496440.934941.5193
310.512240.970641.3557
410.564840.977540.9318
510.569441.012040.9654
610.596841.020740.6002
710.613941.080441.3952
810.616741.119041.0636
910.662441.133640.8099
1010.688641.160740.8892

结论

和数值相比,字符串比较慢太多,多以完全值得花费时间来优化代码,把参与布尔运算的数据类型做成数值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值