vbs的字符串操作效率分析總結(jié)
來源:易賢網(wǎng) 閱讀:1275 次 日期:2016-07-07 14:53:00
溫馨提示:易賢網(wǎng)小編為您整理了“vbs的字符串操作效率分析總結(jié)”,方便廣大網(wǎng)友查閱!

可vbs根本就沒有類似于StringBuilder這樣的東東,所以咱哥們只能自己想辦法優(yōu)化了。

正文:

我寫了幾段代碼做了測(cè)試,得出以下結(jié)果:

'普通字符串連接

StringLinkTest1() '性能最差,大約耗時(shí)20秒(最要命的是在這20秒內(nèi),整個(gè)CPU幾乎是100%滿負(fù)荷在運(yùn)行)

'普通字符串連接,但使用了臨時(shí)變量來提升效率

StringLinkTest2() '性能令人吃驚的改善,大約耗時(shí)0.2秒

'使用數(shù)組+Join函數(shù)處理

StringArrayTest() '性能最佳,大約耗時(shí)0.06秒

'本來還有個(gè)方法,是利用字典對(duì)象:Scripting.Dictionary 來操作的,但由于在大量連續(xù)使用的類方法的情況下,會(huì)直接影響效率(效率介于StringArrayTest和StringLinkTest2之間),在此就不貼了

得出的結(jié)果就是,在vbs的字符串處理上,還是可以解決效率問題的。

代碼如下:

<%

'vbs版高速字符串操作代碼演示

'淮南子編寫

Option explicit

Dim StrTime,EndTime

Dim MyString,MyArray,ArrayIndexCount,CurIndex

Const TestNumber = 9999 '循環(huán)次數(shù)

StrTime = Timer()

'============測(cè)試開始============

'代碼執(zhí)行效率

'本人機(jī)器配置:

'CPU: 酷睿雙核2250 CPU頻率:1.73G

'內(nèi)存: 1GB

'請(qǐng)逐一開啟方法進(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í)變量來提速 ,效率較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

%>

也可以用數(shù)組來拼接字符串啦!

代碼如下:

'最簡(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

'字符串拼接類公共版

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

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:vbs的字符串操作效率分析總結(jié)
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)