1,486
社区成员
发帖
与我相关
我的任务
分享
private sub CopyMyType(byref inType as qq,byref outType as qq)
with outtype
.v1=intype.v1
redim .a(ubound(intype.a))
call copymemory(byval varptr(.a(0)),byval varptr(intype.a(0)),ubound(intype.a)+1)
redim .b(ubound(intype.b))
call copymemory(byval varptr(.b(0)),byval varptr(intype.b(0)),ubound(intype.b)+1)
end with
end sub
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal Destination As Any, ByVal Source As Any, ByVal Length As Long)
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
Private Type QQ
V1 As Long
a() As Long
b() As Long
End Type
Private Const nCount As Long = 1000
Private Const nCount2 As Long = 50000
Dim V1() As QQ, V2() As QQ
Private Sub CopyMyType(ByRef inType As QQ, ByRef outType As QQ)
With outType
.V1 = inType.V1
ReDim .a(UBound(inType.a))
Call CopyMemory(ByVal VarPtr(.a(0)), ByVal VarPtr(inType.a(0)), UBound(inType.a) + 1)
ReDim .b(UBound(inType.b))
Call CopyMemory(ByVal VarPtr(.b(0)), ByVal VarPtr(inType.b(0)), UBound(inType.b) + 1)
End With
End Sub
Private Sub Command1_Click()
Dim nTM As Long
nTM = GetTickCount
V2() = V1()
Print GetTickCount - nTM
End Sub
Private Sub Command2_Click()
Dim nTM As Long, I As Long
nTM = GetTickCount
For I = 0 To nCount
Call CopyMyType(V1(I), V2(I))
Next
Print GetTickCount - nTM
End Sub
Private Sub Form_Load()
Dim I As Long, KK() As Long
ReDim V1(nCount)
ReDim V2(nCount)
ReDim KK(nCount2)
For I = 0 To nCount2
KK(I) = I
Next
For I = 0 To nCount
With V1(I)
.V1 = I
ReDim .a(nCount2)
Call CopyMemory(ByVal VarPtr(.a(0)), ByVal VarPtr(KK(0)), nCount2 + 1)
ReDim .b(nCount2)
Call CopyMemory(ByVal VarPtr(.b(0)), ByVal VarPtr(KK(0)), nCount2 + 1)
End With
Next
End Sub
Private Type QQ
v1 As Long
a As Long
b As Long
End Type