1,486
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Private Const MASK_ADDR_A As Long = &H3FFFFC ' 地址空间掩码_A
Private Const MASK_ADDR_B As Long = &H3FFFFF ' 地址空间掩码_B
Private Const BUFF_MAX As Long = 4194319 ' 数据空间上界(4MB + 16B)
Private arrData(BUFF_MAX) As Byte
Private mlBaseMEM As Long
Private Sub InitData()
Dim i As Long
mlBaseMEM = VarPtr(arrData(0&))
Call Randomize
For i = 0& To BUFF_MAX
arrData(i) = Int(256 * Rnd())
Next
lstOut.AddItem Time$ & " 数据填充完成"
End Sub
Private Sub cmdClear_Click()
Call lstOut.Clear
End Sub
Private Sub cmdCopyMemA_Click()
Dim i&, k As Long
Dim w&, u As Long
k = Val(txtTime.Text)
If (1& > k) Then Exit Sub
If (k > 20000&) Then
MsgBox "输入次数值太大。", 64&
Exit Sub
End If
cmdCopyMemA.Enabled = False
Call Randomize
w = MASK_ADDR_A * Rnd()
DoEvents
u = GetTickCount()
For i = 1& To 10000& * k
Call CopyMemory(w, ByVal mlBaseMEM + w, 4&)
w = MASK_ADDR_A And w
Next
u = GetTickCount() - u
lstOut.AddItem "CopyMemory 边界对齐"
lstOut.AddItem k & "万次 消耗时间:" & u & "ms"
lstOut.ListIndex = lstOut.ListCount - 1
cmdCopyMemA.Enabled = True
End Sub
Private Sub cmdCopyMemB_Click()
Dim i&, k As Long
Dim w&, u As Long
k = Val(txtTime.Text)
If (1& > k) Then Exit Sub
If (k > 20000&) Then
MsgBox "输入次数值太大。", 64&
Exit Sub
End If
cmdCopyMemB.Enabled = False
Call Randomize
w = MASK_ADDR_B * Rnd()
DoEvents
u = GetTickCount()
For i = 1& To 10000& * k
Call CopyMemory(w, ByVal mlBaseMEM + w, 4&)
w = MASK_ADDR_B And w
Next
u = GetTickCount() - u
lstOut.AddItem "CopyMemory 边界不对齐"
lstOut.AddItem k & "万次消耗时间:" & u & "ms"
lstOut.ListIndex = lstOut.ListCount - 1
cmdCopyMemB.Enabled = True
End Sub
Private Sub cmdMemLA_Click()
Dim i&, k As Long
Dim w&, u As Long
k = Val(txtTime.Text)
If (1& > k) Then Exit Sub
If (k > 20000&) Then
MsgBox "输入次数值太大。", 64&
Exit Sub
End If
cmdMemLA.Enabled = False
Call Randomize
w = MASK_ADDR_A * Rnd()
DoEvents
u = GetTickCount()
For i = 1& To 10000& * k
w = MemLong(mlBaseMEM + w)
w = MASK_ADDR_A And w
Next
u = GetTickCount() - u
lstOut.AddItem "MemLong 边界对齐 "
lstOut.AddItem k & "万次 消耗时间:" & u & "ms"
lstOut.ListIndex = lstOut.ListCount - 1
cmdMemLA.Enabled = True
End Sub
Private Sub cmdMemLB_Click()
Dim i&, k As Long
Dim w&, u As Long
k = Val(txtTime.Text)
If (1& > k) Then Exit Sub
If (k > 20000&) Then
MsgBox "输入次数值太大。", 64&
Exit Sub
End If
cmdMemLB.Enabled = False
Call Randomize
w = MASK_ADDR_B * Rnd()
DoEvents
u = GetTickCount()
For i = 1& To 10000& * k
w = MemLong(mlBaseMEM + w)
w = MASK_ADDR_B And w
Next
u = GetTickCount() - u
lstOut.AddItem "MemLong 边界不对齐 "
lstOut.AddItem k & "万次 消耗时间:" & u & "ms"
lstOut.ListIndex = lstOut.ListCount - 1
cmdMemLB.Enabled = True
End Sub
Private Sub cmdResetData_Click()
Call InitData
End Sub
Private Sub Form_Load()
Call InitData
End Sub
Option Explicit
Private Declare Function GetTickCount Lib "Kernel32" () As Long
Private Declare Sub CopyMemory Lib "Kernel32" Alias "RtlMoveMemory" ( _
Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal Addr As Long, RetVal As Long)
Private Const MASK_ADDR_A As Long = &H3FFFFC ' 地址空间掩码_A
Private Const MASK_ADDR_B As Long = &H3FFFFF ' 地址空间掩码_B
Private Const BUFF_MAX As Long = 4194319 ' 数据空间上界(4MB + 16B)
Private arrData(BUFF_MAX) As Byte
Private mlBaseMEM As Long
Private Sub InitData()
Dim i As Long
mlBaseMEM = VarPtr(arrData(0&))
Call Randomize
For i = 0& To BUFF_MAX
arrData(i) = Int(256 * Rnd())
Next
lstOut.AddItem Time$ & " 数据填充完成"
End Sub
Private Sub cmdClear_Click()
Call lstOut.Clear
End Sub
Private Sub cmdCopyMemA_Click()
Dim i&, k As Long
Dim w&, u As Long
k = Val(txtTime.Text)
If (1& > k) Then Exit Sub
If (k > 20000&) Then
MsgBox "输入次数值太大。", 64&
Exit Sub
End If
cmdCopyMemA.Enabled = False
Call Randomize
w = MASK_ADDR_A * Rnd()
DoEvents
u = GetTickCount()
For i = 1& To 10000& * k
Call CopyMemory(w, ByVal mlBaseMEM + w, 4&)
w = MASK_ADDR_A And w
Next
u = GetTickCount() - u
lstOut.AddItem "CopyMemory 边界对齐"
lstOut.AddItem k & "万次 消耗时间:" & u & "ms"
lstOut.ListIndex = lstOut.ListCount - 1
cmdCopyMemA.Enabled = True
End Sub
Private Sub cmdCopyMemB_Click()
Dim i&, k As Long
Dim w&, u As Long
k = Val(txtTime.Text)
If (1& > k) Then Exit Sub
If (k > 20000&) Then
MsgBox "输入次数值太大。", 64&
Exit Sub
End If
cmdCopyMemB.Enabled = False
Call Randomize
w = MASK_ADDR_B * Rnd()
DoEvents
u = GetTickCount()
For i = 1& To 10000& * k
Call CopyMemory(w, ByVal mlBaseMEM + w, 4&)
w = MASK_ADDR_B And w
Next
u = GetTickCount() - u
lstOut.AddItem "CopyMemory 边界不对齐"
lstOut.AddItem k & "万次消耗时间:" & u & "ms"
lstOut.ListIndex = lstOut.ListCount - 1
cmdCopyMemB.Enabled = True
End Sub
Private Sub cmdMemLA_Click()
Dim i&, k As Long
Dim w&, u As Long
k = Val(txtTime.Text)
If (1& > k) Then Exit Sub
If (k > 20000&) Then
MsgBox "输入次数值太大。", 64&
Exit Sub
End If
cmdMemLA.Enabled = False
Call Randomize
w = MASK_ADDR_A * Rnd()
DoEvents
u = GetTickCount()
For i = 1& To 10000& * k
Call GetMem4(mlBaseMEM + w, w)
w = MASK_ADDR_A And w
Next
u = GetTickCount() - u
lstOut.AddItem "MemLong 边界对齐 "
lstOut.AddItem k & "万次 消耗时间:" & u & "ms"
lstOut.ListIndex = lstOut.ListCount - 1
cmdMemLA.Enabled = True
End Sub
Private Sub cmdMemLB_Click()
Dim i&, k As Long
Dim w&, u As Long
k = Val(txtTime.Text)
If (1& > k) Then Exit Sub
If (k > 20000&) Then
MsgBox "输入次数值太大。", 64&
Exit Sub
End If
cmdMemLB.Enabled = False
Call Randomize
w = MASK_ADDR_B * Rnd()
DoEvents
u = GetTickCount()
For i = 1& To 10000& * k
Call GetMem4(mlBaseMEM + w, w)
w = MASK_ADDR_B And w
Next
u = GetTickCount() - u
lstOut.AddItem "MemLong 边界不对齐 "
lstOut.AddItem k & "万次 消耗时间:" & u & "ms"
lstOut.ListIndex = lstOut.ListCount - 1
cmdMemLB.Enabled = True
End Sub
Private Sub cmdResetData_Click()
Call InitData
End Sub
Private Sub Form_Load()
Call InitData
End Sub