n久没上来发东西了,感觉很过意不去,又找了点东西放上来。
VB6字符串连接(&)操作效率
本人某天为了优化某人写的VB6模块而临时测试了下VB6里面字符串的“&”(连接)操作的耗时。
现在把当时的记录放上来,大家可以参考下。
试试下面三段VB6代码:
功能完全相同,都是获得一个字符串,这个字符串含有重复10遍的连起来的从0到10000的数字。
但效率可是完全不同的,你可以分别测试一下它们的耗时。
1----------------
Dim
str1
as
String
Dim s1 As Long , s2 As Long
For s2 = 0 To 10
For s1 = 0 To 10000
str1 = str1 & Str$(s1)
Next
Next
Dim s1 As Long , s2 As Long
For s2 = 0 To 10
For s1 = 0 To 10000
str1 = str1 & Str$(s1)
Next
Next
2-----------------
Dim
str1
as
String
,str2
as
String
Dim s1 As Long , s2 As Long
For s2 = 0 To 10
str2 = ""
For s1 = 0 To 10000
str2 = str2 & Str$(s1)
Next
str1 = str1 & str2
Next
Dim s1 As Long , s2 As Long
For s2 = 0 To 10
str2 = ""
For s1 = 0 To 10000
str2 = str2 & Str$(s1)
Next
str1 = str1 & str2
Next
3-----------------
Dim
str1
as
String
,str2
as
String
Dim s1 As Long , s2 As Long
Dim st1 As Long , ln1 As Long
For s2 = 0 To 10
str2 = Space ( 100000 )
st1 = 1
For s1 = 0 To 10000
ln1 = Len (Str(s1))
Mid (str2, st1, ln1) = s1
st1 = st1 + ln1
Next
st1 = str1 & RTrim $(str2)
Next
Dim s1 As Long , s2 As Long
Dim st1 As Long , ln1 As Long
For s2 = 0 To 10
str2 = Space ( 100000 )
st1 = 1
For s1 = 0 To 10000
ln1 = Len (Str(s1))
Mid (str2, st1, ln1) = s1
st1 = st1 + ln1
Next
st1 = str1 & RTrim $(str2)
Next
我在Debug模式下,Core2Duo T7100下的测试结果是
1、76秒多
2、2.6秒左右
3、120毫秒左右
编译成代码速度优化的EXE本地代码后,速度没有提高多少。
差了多少倍?
结论:字符串&操作相当的费时,而且字符串越大&操作越费时。
(同时可见字符串&操作几乎不能被优化多少)
(这么低的效率,明显VB6对&操作只是呆板的重新申请空间然后copy而已)
另外,貌似Mid语句的效率没有想象中的那么低下。