亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        vbs的字符串操作效率分析總結(jié)

        字號:


            可vbs根本就沒有類似于StringBuilder這樣的東東,所以咱哥們只能自己想辦法優(yōu)化了。
            正文:
            我寫了幾段代碼做了測試,得出以下結(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的字符串處理上,還是可以解決效率問題的。
            代碼如下:
            <%
            '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ù)組來拼接字符串啦!
            代碼如下:
            '最簡單的例子,生成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