vbs的字符串操作效率分析總結(jié)
可vbs根本就沒(méi)有類(lèi)似于StringBuilder這樣的東東,所以咱哥們只能自己想辦法優(yōu)化了。
正文:
我寫(xiě)了幾段代碼做了測(cè)試,得出以下結(jié)果:
'普通字符串連接
StringLinkTest1() '性能最差,大約耗時(shí)20秒(最要命的是在這20秒內(nèi),整個(gè)CPU幾乎是100%滿負(fù)荷在運(yùn)行)
'普通字符串連接,但使用了臨時(shí)變量來(lái)提升效率
StringLinkTest2() '性能令人吃驚的改善,大約耗時(shí)0.2秒
'使用數(shù)組+Join函數(shù)處理
StringArrayTest() '性能最佳,大約耗時(shí)0.06秒
'本來(lái)還有個(gè)方法,是利用字典對(duì)象:Scripting.Dictionary 來(lái)操作的,但由于在大量連續(xù)使用的類(lèi)方法的情況下,會(huì)直接影響效率(效率介于StringArrayTest和StringLinkTest2之間),在此就不貼了
得出的結(jié)果就是,在vbs的字符串處理上,還是可以解決效率問(wèn)題的。
代碼如下:
<%
'vbs版高速字符串操作代碼演示
'淮南子編寫(xiě)
Option explicit
Dim StrTime,EndTime
Dim MyString,MyArray,ArrayIndexCount,CurIndex
Const TestNumber = 9999 '循環(huán)次數(shù)
StrTime = Timer()
'============測(cè)試開(kāi)始============
'代碼執(zhí)行效率
'本人機(jī)器配置:
'CPU: 酷睿雙核2250 CPU頻率:1.73G
'內(nèi)存: 1GB
'請(qǐng)逐一開(kāi)啟方法進(jìn)行測(cè)試
'StringLinkTest1() '性能最差,大約耗時(shí)20秒
'StringLinkTest2() '性能大大改善,大約耗時(shí)0.2秒
'StringArrayTest() '性能最佳,大約耗時(shí)0.06秒
'============測(cè)試結(jié)束============
'輸出結(jié)果
'Response.Write MyString
EndTime = Timer()
Response.Write "耗時(shí):" & FormatNumber((EndTime-StrTime) * 1000,3) & " 毫秒"
'字符串操作函數(shù),淮南子原創(chuàng)
Sub Add(Value)
If (CurIndex >= ArrayIndexCount) Then
ArrayIndexCount = CurIndex * 1.1 '如果欲添加項(xiàng)超出數(shù)組下標(biāo),則將數(shù)組容量擴(kuò)增百分之10
ReDim Preserve MyArray(ArrayIndexCount)
End If
MyArray(CurIndex) = Value
CurIndex = CurIndex + 1
End Sub
'測(cè)試方法
'使用數(shù)組進(jìn)行字符串疊加,在所有方法中,該方法性能最佳(效率較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
'測(cè)試方法1
'常規(guī)的字符串連接
Sub StringLinkTest1()
Dim i,str
dim a1
a1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
For i=0 to TestNumber
'常規(guī)字符串連接
Str=(Str&a1)
Next
MyString = Str
End Sub
'測(cè)試方法2
'在常規(guī)的字符串連接方式中,使用臨時(shí)變量來(lái)提速 ,效率較StringLinkTest1()的方法提升了近100倍
Sub StringLinkTest2()
Dim i,str,a1,TmpString
a1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
For i=0 to TestNumber
'使用臨時(shí)變量提速
TmpString = (TmpString & a1)
'每二百次則進(jìn)行一次累計(jì)
If i mod 200 = 0 Then
'保存臨時(shí)變量值
Str = (Str & TmpString)
'清空臨時(shí)變量值
TmpString = ""
End If
Next
if TmpString<>"" Then MyString = (Str & TmpString)
End Sub
%>
如有不對(duì)之處,請(qǐng)大家拍拍磚,呵呵
也可以用數(shù)組來(lái)拼接字符串啦!
'最簡(jiǎn)單的例子,生成num個(gè)重復(fù)的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
'字符串拼接類(lèi)公共版
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
上一篇:用VBScript收集系統(tǒng)信息并上傳到ftp空間
欄 目:vb
下一篇:VBS調(diào)用Windows API函數(shù)的代碼
本文標(biāo)題:vbs的字符串操作效率分析總結(jié)
本文地址:http://mengdiqiu.com.cn/a1/vb/7462.html
您可能感興趣的文章
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10什么是一個(gè)高效的軟件
- 01-10VBS中的正則表達(dá)式的用法大全 <font color=red>原創(chuàng)&
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10VBScript教程 第十一課深入VBScript
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript語(yǔ)法速查及實(shí)例說(shuō)明
- 01-10VBS中Select CASE的其它用法
- 01-10VBScript教程 第七課使用條件語(yǔ)句
- 01-10vbscript 可以按引用傳遞參數(shù)嗎?


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹(shù)的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10下載文件到本地運(yùn)行的vbs
- 01-10飄葉千夫指源代碼,又稱(chēng)qq刷屏器
- 01-10SendKeys參考文檔
- 01-10什么是一個(gè)高效的軟件
- 01-10VBS中的正則表達(dá)式的用法大全 &l
- 01-10exe2swf 工具(Adodb.Stream版)
- 01-10VBS中SendKeys的基本應(yīng)用
- 01-10用VBSCRIPT控制ONSUBMIT事件
- 01-10VBScript教程 第十一課深入VBScript
- 01-10VBScript語(yǔ)法速查及實(shí)例說(shuō)明
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-11Mac OSX 打開(kāi)原生自帶讀寫(xiě)NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10SublimeText編譯C開(kāi)發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-10delphi制作wav文件的方法