我们知道用“&”号比用“+”号快。因为“+”要对字符窜变量做类型判断并转换。
当时也没想出什么好办法。只是将两次“&”运算拆开,速度提了一倍。还是解决不了问题。
结果就是:fori1to5000,i以字符形式相加。用&运算,要300-500ms
现在试试下面这个。建了个CStrCat的类。
你可以用这个代码测试一下性能分别:
当时也没想出什么好办法。只是将两次“&”运算拆开,速度提了一倍。还是解决不了问题。
结果就是:fori1to5000,i以字符形式相加。用&运算,要300-500ms
现在试试下面这个。建了个CStrCat的类。
程序代码:
ClassCStrCat'这是类开始。
Privatei,sa()
PublicPropertyGetValue
RedimPreservesa(i)
Value=Join(sa,"")
EndProperty
PrivateSubClass_Initialize()
i=clng(0)
Redimsa(500)
EndSub
PrivateSubClass_Terminate()
Erasesa
EndSub
PublicfunctionAdd(ps)
Iflen(ps)=0ThenExitFunction
If(i>=ubound(sa))Thenupsize
sa(i)=ps
i=i+1
Endfunction
PrivateSubUpSize()
Dimu
u=ubound(sa)
RedimPreservesa(clng(u+u*0.1))
EndSub
EndClass
Privatei,sa()
PublicPropertyGetValue
RedimPreservesa(i)
Value=Join(sa,"")
EndProperty
PrivateSubClass_Initialize()
i=clng(0)
Redimsa(500)
EndSub
PrivateSubClass_Terminate()
Erasesa
EndSub
PublicfunctionAdd(ps)
Iflen(ps)=0ThenExitFunction
If(i>=ubound(sa))Thenupsize
sa(i)=ps
i=i+1
Endfunction
PrivateSubUpSize()
Dimu
u=ubound(sa)
RedimPreservesa(clng(u+u*0.1))
EndSub
EndClass
你可以用这个代码测试一下性能分别:
程序代码:
<%
PageExeTime1=Timer*1000'计时开始
Setsc=newCStrCat
Fori=0To5000
sc.addi&"aaaaaa"
next
response.writesc.value
'计时结束
Response.Write",Processedtime:"&fix(abs(CDBL(Timer)*1000-PageExeTime1))&"ms</font></p>"
PageExeTime2=Timer*1000
Fori=0To5000
sc2=sc2&i&"aaaaaa"
Next
response.writesc2
'计时结束
Response.Write",Processedtime:"&fix(abs(CDBL(Timer)*1000-PageExeTime2))&"ms</font></p>"%>
PageExeTime1=Timer*1000'计时开始
Setsc=newCStrCat
Fori=0To5000
sc.addi&"aaaaaa"
next
response.writesc.value
'计时结束
Response.Write",Processedtime:"&fix(abs(CDBL(Timer)*1000-PageExeTime1))&"ms</font></p>"
PageExeTime2=Timer*1000
Fori=0To5000
sc2=sc2&i&"aaaaaa"
Next
response.writesc2
'计时结束
Response.Write",Processedtime:"&fix(abs(CDBL(Timer)*1000-PageExeTime2))&"ms</font></p>"%>