午夜国产狂喷潮在线观看|国产AⅤ精品一区二区久久|中文字幕AV中文字幕|国产看片高清在线

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

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

    正文:

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

    '普通字符串連接

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

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

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

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

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

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

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

    代碼如下:

    <%

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

    '淮南子編寫

    Option explicit

    Dim StrTime,EndTime

    Dim MyString,MyArray,ArrayIndexCount,CurIndex

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

    StrTime = Timer()

    '============測試開始============

    '代碼執(zhí)行效率

    '本人機器配置:

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

    '內(nèi)存: 1GB

    '請逐一開啟方法進行測試

    '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ù)組容量擴增百分之10

    ReDim Preserve MyArray(ArrayIndexCount)

    End If

    MyArray(CurIndex) = Value

    CurIndex = CurIndex + 1

    End Sub

    '測試方法

    '使用數(shù)組進行字符串疊加,在所有方法中,該方法性能最佳(效率較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)

    '每二百次則進行一次累計

    If i mod 200 = 0 Then

    '保存臨時變量值

    Str = (Str & TmpString)

    '清空臨時變量值

    TmpString = ""

    End If

    Next

    if TmpString<>"" Then MyString = (Str & TmpString)

    End Sub

    %>

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

    代碼如下:

    '最簡單的例子,生成num個重復(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

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

    2025國考·省考課程試聽報名

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