這篇文章主要介紹“vbs的字符串操作的效率分析”,在日常操作中,相信很多人在vbs的字符串操作的效率分析問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”vbs的字符串操作的效率分析”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)公司專注于都安企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開發(fā)。都安網(wǎng)站建設(shè)公司,為都安等地區(qū)提供建站服務(wù)。全流程按需設(shè)計網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
正文:
我寫了幾段代碼做了測試,得出以下結(jié)果:
'普通字符串連接
StringLinkTest1() '性能最差,大約耗時20秒(最要命的是在這20秒內(nèi),整個CPU幾乎是100%滿負(fù)荷在運(yùn)行)
'普通字符串連接,但使用了臨時變量來提升效率
StringLinkTest2() '性能令人吃驚的改善,大約耗時0.2秒
'使用數(shù)組+Join函數(shù)處理
StringArrayTest() '性能很好,大約耗時0.06秒
'本來還有個方法,是利用字典對象:Scripting.Dictionary 來操作的,但由于在大量連續(xù)使用的類方法的情況下,會直接影響效率(效率介于StringArrayTest和StringLinkTest2之間),在此就不貼了
得出的結(jié)果就是,在vbs的字符串處理上,還是可以解決效率問題的。
代碼如下:
復(fù)制代碼 代碼如下:
<%
'vbs版高速字符串操作代碼演示
'淮南子編寫
Option explicit
Dim StrTime,EndTime
Dim MyString,MyArray,ArrayIndexCount,CurIndex
Const TestNumber = 9999 '循環(huán)次數(shù)
StrTime = Timer()
'============測試開始============
'代碼執(zhí)行效率
'本人機(jī)器配置:
'CPU: 酷睿雙核2250 CPU頻率:1.73G
'內(nèi)存: 1GB
'請逐一開啟方法進(jìn)行測試
'StringLinkTest1() '性能最差,大約耗時20秒
'StringLinkTest2() '性能大大改善,大約耗時0.2秒
'StringArrayTest() '性能很好,大約耗時0.06秒
'============測試結(jié)束============
'輸出結(jié)果
'Response.Write MyString
EndTime = Timer()
Response.Write "耗時:" & FormatNumber((EndTime-StrTime) * 1000,3) & " 毫秒"
'字符串操作函數(shù),淮南子原創(chuàng)
Sub Add(Value)
If (CurIndex >= ArrayIndexCount) Then
ArrayIndexCount = CurIndex * 1.1 '如果欲添加項超出數(shù)組下標(biāo),則將數(shù)組容量擴(kuò)增百分之10
ReDim Preserve MyArray(ArrayIndexCount)
End If
MyArray(CurIndex) = Value
CurIndex = CurIndex + 1
End Sub
'測試方法
'使用數(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
'測試方法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
'測試方法2
'在常規(guī)的字符串連接方式中,使用臨時變量來提速 ,效率較StringLinkTest1()的方法提升了近100倍
Sub StringLinkTest2()
Dim i,str,a1,TmpString
a1 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
For i=0 to TestNumber
'使用臨時變量提速
TmpString = (TmpString & a1)
'每二百次則進(jìn)行一次累計
If i mod 200 = 0 Then
'保存臨時變量值
Str = (Str & TmpString)
'清空臨時變量值
TmpString = ""
End If
Next
if TmpString<>"" Then MyString = (Str & TmpString)
End Sub
%>
也可以用數(shù)組來拼接字符串啦!
復(fù)制代碼 代碼如下:
'最簡單的例子,生成num個重復(fù)的str,例如 XString(5,"
") '輸出:
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
到此,關(guān)于“vbs的字符串操作的效率分析”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!