在 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