Cur*_*che 13
怎么样...
这将保留MyArray中已有的数据
Redim Preserve MyArray(15)
Run Code Online (Sandbox Code Playgroud)
这将删除MyArray中存在的任何先前数据
Redim MyArray(15)
Run Code Online (Sandbox Code Playgroud)
Mar*_*old 11
重新定义数组的最有效方法是限制调整该数组大小的次数.每次调整数组大小时,VB都会占用整个数组并复制它,浪费时间和内存.
如果在开发时不知道数组的大小,则应该最好地猜测数组的最大大小,然后填充数组.完成填充阵列后,您可以将其调整到正确的大小.
在循环中,通常最好通过在空间不足时将当前数组的大小加倍来进行猜测.您可以在下面的操作中看到此操作,RedimTestA()每次迭代(1,000,000次)调整数组RedimTestB()大小,并且仅偶尔调整大小(22次).
我的笔记本电脑RedimTestA()需要3.93秒,RedimTestB()需要0.41秒.
Option Explicit
Sub RedimTest()
Dim tA, tB As Single
tA = RedimTestA(1000000)
tB = RedimTestB(1000000)
MsgBox "Test A takes : " & tA & ", and Test B takes : " & tB
End Sub
Function RedimTestA(iterations As Long) As Single
Dim t As Single
Dim i As Long
Dim aryString() As String
Dim myString As String
t = Timer
Do While i <= iterations
ReDim Preserve aryString(i) As String
aryString(i) = "ABCEFG123"
i = i + 1
Loop
RedimTestA = Timer - t
End Function
Function RedimTestB(iterations As Long) As Single
Dim t As Single
Dim i As Long
Dim aryString() As String
Dim myString As String
t = Timer
ReDim aryString(0) As String
Do While i <= iterations
If i >= UBound(aryString) Then
ReDim Preserve aryString(i * 2) As String
End If
aryString(i) = "ABCEFG123"
i = i + 1
Loop
ReDim Preserve aryString(i - 1) As String ' i - 1 becuase of the final i = i + 1
RedimTestB = Timer - t
End Function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38798 次 |
| 最近记录: |