瀏覽單個文章
ivantw
Junior Member
 
ivantw的大頭照
 

加入日期: May 2005
您的住址: Autobahn, Deutschland
文章: 743
在 Form 上拉出 CommandButton x1 (Command1)、ListBox x2 (List1, List2)
此範例 Form Load 時亂數產生兩個字串,故設定的長度越長將影響 Form Load 時間。
請根據你的需求修改成符合適合你的狀況。

兩字串長度為4096,有100處不同時。
在Pentium-M 2.23G, DDRII 533 2GB, 915GM 主機上執行:
純比對:1ms 以內完成
輸出至ListBox:14~17ms完成
輸出至ListBox+Debug:90~95ms完成

備註:計算比對其實很快,你要注意的是輸出的方式!

Pos S1 S2
9 --> q [71] Y [59]
124 --> : [3A] ] [5D]
227 --> f [66] U [55]
236 --> 4 [34] < [3C]
260 --> F [46] A [41]
285 --> X [58] 5 [35]
369 --> { [7B] s [73]
458 --> D [44] _ [5F]
509 --> W [57] K [4B]
596 --> i [69] z [7A]
613 --> b [62] S [53]
646 --> I [49] b [62]
721 --> 4 [34] x [78]
749 --> D [44] P [50]
776 --> } [7D] q [71]
779 --> d [64] 1 [31]
904 --> Z [5A] g [67]
920 --> m [6D] | [7C]
922 --> < [3C] 3 [33]
928 --> K [4B] { [7B]
953 --> | [7C] u [75]
982 --> v [76] ; [3B]
1051 --> 4 [34] T [54]
1101 --> 5 [35] 2 [32]
1134 --> : [3A] Z [5A]
1162 --> R [52] 5 [35]
1245 --> I [49] S [53]
1279 --> i [69] L [4C]
1285 --> v [76] ^ [5E]
1318 --> z [7A] G [47]
1349 --> 3 [33] } [7D]
1433 --> g [67] i [69]
1435 --> m [6D] [ [5B]
1440 --> D [44] T [54]
1537 --> \ [5C] c [63]
1594 --> U [55] p [70]
1644 --> z [7A] a [61]
1670 --> f [66] @ [40]
1678 --> ` [60] = [3D]
1715 --> 4 [34] w [77]
1799 --> C [43] X [58]
1814 --> h [68] d [64]
1827 --> K [4B] I [49]
1873 --> V [56] L [4C]
1936 --> ] [5D] < [3C]
1943 --> B [42] W [57]
2040 --> b [62] L [4C]
2111 --> G [47] J [4A]
2164 --> ~ [7E]  [7F]
2183 --> 8 [38] l [6C]
2197 --> x [78] h [68]
2223 --> M [4D] E [45]
2306 --> z [7A] ^ [5E]
2332 --> = [3D] x [78]
2390 --> K [4B] P [50]
2462 --> R [52] ~ [7E]
2488 --> T [54] X [58]
2515 --> r [72] R [52]
2531 --> _ [5F] X [58]
2621 --> 2 [32] E [45]
2635 --> h [68] q [71]
2658 --> L [4C] a [61]
2744 --> @ [40] ~ [7E]
2745 --> @ [40] B [42]
2764 --> 7 [37] z [7A]
2798 --> Q [51] O [4F]
2884 --> l [6C] T [54]
2894 --> 4 [34]  [7F]
2896 --> V [56] y [79]
2947 --> u [75] l [6C]
2977 --> X [58] 2 [32]
2984 --> [ [5B] ? [3F]
3034 --> < [3C] p [70]
3207 --> T [54] 3 [33]
3227 --> f [66] r [72]
3235 --> I [49] S [53]
3242 --> L [4C] ; [3B]
3243 --> F [46] u [75]
3273 --> | [7C] f [66]
3286 --> } [7D] N [4E]
3287 --> A [41] c [63]
3393 --> k [6B] J [4A]
3485 --> ? [3F] N [4E]
3515 -->  [7F] 3 [33]
3556 --> @ [40] < [3C]
3557 --> ^ [5E] 8 [38]
3583 --> c [63] s [73]
3597 --> R [52] W [57]
3633 --> f [66] 8 [38]
3660 --> g [67] 0 [30]
3687 --> M [4D] 7 [37]
3708 --> r [72] z [7A]
3730 --> p [70] : [3A]
3772 --> ~ [7E] ` [60]
3904 --> _ [5F] 7 [37]
3923 --> 5 [35] : [3A]
3982 --> < [3C] P [50]
4025 --> n [6E] 4 [34]
4083 --> M [4D] y [79]

Time Cost:94ms







代碼:
Option Explicit
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Sub RtlMoveMemory Lib "kernel32" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Private s1 As String
Private s2 As String
Private sLen As Long

Private t1 As Long
Private t2 As Long


Private Sub Command1_Click()
        Dim bCx As Long
        Dim b1() As Byte
        Dim b2() As Byte
        Dim export As String
        
        List2.Clear
        
        t1 = GetTickCount
        
        
        ReDim b1(1 To sLen)
        ReDim b2(1 To sLen)
        
        RtlMoveMemory b1(1), ByVal s1, sLen
        RtlMoveMemory b2(1), ByVal s2, sLen
        
        Debug.Print "Pos", "S1", "S2"
        For bCx = 1 To sLen
            If b1(bCx) <> b2(bCx) Then
               export = bCx & " --> " & Chr(b1(bCx)) & " [" & Hex(b1(bCx)) & "]" & "   " & Chr(b2(bCx)) & " [" & Hex(b2(bCx)) & "]"
               List2.AddItem (export)
               Debug.Print export
            End If
        Next bCx
        
        t2 = GetTickCount
        
        
        Debug.Print
        Debug.Print "Time Cost:" & (t2 - t1) & "ms"
End Sub

Private Sub Form_Load()
        Dim tCx As Long
        Dim tPos As Long
        
        sLen = 4096
        
        s1 = vbNullString
        s2 = vbNullString
        
        For tCx = 1 To sLen
            s1 = s1 & Chr(Int(Rnd() * 80) + 48)
        Next tCx
        s2 = s1
        
        For tCx = 1 To 100
            tPos = Int(Rnd() * sLen) + 1
            List1.AddItem (tPos)
            Debug.Print tPos
            
            Mid(s2, tPos, 1) = Chr(Int(Rnd() * 80) + 48)
        Next tCx
End Sub
舊 2009-06-25, 10:47 PM #14
回應時引用此文章
ivantw離線中