vbs的字符串操作效率分析总结
作者 佚名
来源 ASP编程
浏览
发布时间 2013-07-09
可vbs根本就没有类似于StringBuilder这样的东东,所以咱哥们只能自己想办法优化了。 正文: 我写了几段代码做了测试,得出以下结果: ''普通字符串连接 StringLinkTest1() ''性能最差,大约耗时20秒(最要命的是在这20秒内,整个CPU几乎是100%满负荷在运行) ''普通字符串连接,但使用了临时变量来提升效率 StringLinkTest2() ''性能令人吃惊的改善,大约耗时0.2秒 ''使用数组+Join函数处理 StringArrayTest() ''性能最佳,大约耗时0.06秒 ''本来还有个方法,是利用字典对象:Scripting.Dictionary 来操作的,但由于在大量连续使用的类方法的情况下,会直接影响效率(效率介于StringArrayTest和StringLinkTest2之间),在此就不贴了 得出的结果就是,在vbs的字符串处理上,还是可以解决效率问题的。 代码如下: 复制代码 代码如下: <% ''vbs版高速字符串操作代码演示 ''淮南子编写 Option explicit Dim StrTime,EndTime Dim MyString,MyArray,ArrayIndexCount,CurIndex Const TestNumber = 9999 ''循环次数 StrTime = Timer() ''============测试开始============ ''代码执行效率 ''本人机器配置: ''CPU: 酷睿双核2250 CPU频率:1.73G ''内存: 1GB ''请逐一开启方法进行测试 ''StringLinkTest1() ''性能最差,大约耗时20秒 ''StringLinkTest2() ''性能大大改善,大约耗时0.2秒 ''StringArrayTest() ''性能最佳,大约耗时0.06秒 ''============测试结束============ ''输出结果 ''Response.Write MyString EndTime = Timer() Response.Write "耗时:" & FormatNumber((EndTime-StrTime) * 1000,3) & " 毫秒" ''字符串操作函数,淮南子原创 Sub Add(Value) If (CurIndex >= ArrayIndexCount) Then ArrayIndexCount = CurIndex * 1.1 ''如果欲添加项超出数组下标,则将数组容量扩增百分之10 ReDim Preserve MyArray(ArrayIndexCount) End If MyArray(CurIndex) = Value CurIndex = CurIndex + 1 End Sub ''测试方法 ''使用数组进行字符串叠加,在所有方法中,该方法性能最佳(效率较StringLinkTest2()的方法提升了近4倍) Sub StringArrayTest() ArrayIndexCount = 20 CurIndex = 0 ReDim MyArray(ArrayIndexCount) Dim i For i = 0 to TestNumber Add "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" Next MyString = Join(MyArray,"") End Sub ''测试方法1 ''常规的字符串连接 Sub StringLinkTest1() Dim i,str dim a1 a1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" For i=0 to TestNumber ''常规字符串连接 Str=(Str&a1) Next MyString = Str End Sub ''测试方法2 ''在常规的字符串连接方式中,使用临时变量来提速 ,效率较StringLinkTest1()的方法提升了近100倍 Sub StringLinkTest2() Dim i,str,a1,TmpString a1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" For i=0 to TestNumber ''使用临时变量提速 TmpString = (TmpString & a1) ''每二百次则进行一次累计 If i mod 200 = 0 Then ''保存临时变量值 Str = (Str & TmpString) ''清空临时变量值 TmpString = "" End If Next if TmpString<>"" Then MyString = (Str & TmpString) End Sub %> 如有不对之处,请大家拍拍砖,呵呵 也可以用数组来拼接字符串啦! 复制代码 代码如下: ''最简单的例子,生成num个重复的str,例如 XString(5,"<br>") ''输出: <br><br><br><br><br> Function XString(num,str) On Error Resume Next Dim i,a Redim a(num-1) For i=0 To num-1 a(i)=str Next XString=Join(a,"") On Error GoTo 0 End Function ''字符串拼接类公共版 Class clsStrCat Private aFStrings() Private iFSPos,iFSLen,iFSIncr Private Sub Class_Initialize() On Error Resume Next iFSIncr = STRCATBUF If Err Then iFSIncr = 200 : Err.Clear Reset On Error GoTo 0 End Sub Private Sub Class_Terminate() Erase aFStrings End Sub Public Property Let Item(ByRef sData) If iFSPos > iFSLen Then iFSLen = iFSPos + iFSIncr ReDim Preserve aFStrings(iFSLen) End If aFStrings(iFSPos) = sData iFSPos = iFSPos + 1 End Property Public Default Property Get Item() Item = Join(aFStrings, "") End Property Public Sub Reset() iFSPos = 0 iFSLen = iFSIncr ReDim aFStrings(iFSLen) End Sub Public Sub Resize(n) If Not IsNumeric(n) Then Exit Sub iFSPos = 0 iFSIncr = n iFSLen = iFSIncr ReDim aFStrings(iFSLen) End Sub Public Property Get Strs() Strs=aFStrings End Property Public Property Get Count() Count=iFSPos End Property Public Property Get IsInit() If iFSPos=0 Then IsInit=True Else IsInit=False End Property End Class |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于vbs的字符串操作效率分析总结的所有评论