我测试了比较速度:
Dim counter As Long
区分大小写的二进制比较(默认):0,016秒:
For counter = 1 To 100000
If InStr("This is macro speed test", "macro") > 0 Then
End If
Next counter
与案例转换不区分大小写:0,068秒:
For counter = 1 To 100000
If InStr(UCase("This is macro speed test"), "MACRO") > 0 Then
End If
Next counter
不区分大小写的vbtext比较:0,08秒:
For counter = 1 To 100000
If InStr(1, "This is macro speed test", "MACRO", vbTextCompare) > 0 Then
End If
Next counter
我想知道为什么文本比较在这个测试中表现不佳,我看到有人在论坛上推荐它#"慢" UCase或LCase转换。
是否有更快的方法进行不区分大小写的比较?
答案 0 :(得分:0)
当我运行时:
Sub test()
Dim counter As Long
Dim start As Double, elapsed As Double
start = Timer
For counter = 1 To 100000
If InStr("This is macro speed test", "macro") > 0 Then
End If
Next counter
elapsed = Timer - start
Debug.Print "1: " & elapsed
start = Timer
For counter = 1 To 100000
If InStr(UCase("This is macro speed test"), UCase("macro")) > 0 Then
End If
Next counter
elapsed = Timer - start
Debug.Print "2: " & elapsed
start = Timer
For counter = 1 To 100000
If InStr(1, "This is macro speed test", "macro", vbTextCompare) > 0 Then
End If
Next counter
elapsed = Timer - start
Debug.Print "3: " & elapsed
End Sub
我得到这样的输出:
1: 0.0078125
2: 0.0703125
3: 0.078125
2)和3)之间的差异缩小到无足轻重。似乎你的第二个代码使用了目标“MACRO”是大写的,其中第三种方法没有假设第三个参数的情况(因此可能在幕后将它们转换为大写或小写) 。
我多次运行你的原始代码,并确认第二次超过三分之一似乎确实存在持久的虽然有轻微的速度优势,这表明如果你在固定的字符串上检查大量的字符串已知的情况,然后转换到该情况并使用不区分大小写的搜索稍微好于使用vbTextCompare
进行不区分大小写的搜索,虽然差异很小,但不太可能产生任何可察觉的差异。