Sgd*_*dva 2 arrays excel vba excel-vba
背景:
我一直使用以下重置它们:
Sub TestWithRedimOnly()
Dim ExampleArray() As String
ReDim Preserve ExampleArray(1)
ExampleArray(1) = "yo"
MsgBox ExampleArray(1)
ReDim ExampleArray(0) As String
MsgBox ExampleArray(1) 'this confirms is reset!
End Sub
Run Code Online (Sandbox Code Playgroud)
如果我擦除
Sub TestWithEraseAndRedim()
Dim ExampleArray() As String
ReDim Preserve ExampleArray(1)
ExampleArray(1) = "yo"
MsgBox ExampleArray(1)
Erase ExampleArray
MsgBox ExampleArray(1) 'this confirms is reset!
ReDim ExampleArray(0) As String
MsgBox ExampleArray(1) 'this confirms is reset!
End Sub
Run Code Online (Sandbox Code Playgroud)
最后,都重置变量。
问题:
使用擦除语句真的值得吗?是否可以防止内存泄漏比仅仅防止内存泄漏更好Redim.. As..?
自从您询问了Redim vs Erase在内存方面的后果后,...唯一的实际区别是动态数组。
如果擦除非动态数组,则会将其中的值设置为0s,零长度字符串或变量的“空”值。例如:Dim Array(10)
如果擦除动态数组,则它将完全释放内存。例如:Dim Array()
这两个选项均不会导致内存泄漏。如果您遍历数组并重新编码/擦除代码的代码部分,两者都将导致释放内存的方式不会不断扩展所使用的内存。如果您遇到遍历代码的内存泄漏问题,那么可能是一个更好的问题。
从擦除帮助:
Dim NumArray(10) As Integer ' Integer array.
Erase NumArray ' Each element set to 0.
Dim StrVarArray(10) As String ' Variable-string array.
Erase StrVarArray ' Each element set to zero-length string ("").
Dim StrFixArray(10) As String * 10 ' Fixed-string array.
Erase StrFixArray ' Each element set to 0.
Dim VarArray(10) As Variant ' Variant array.
Erase VarArray ' Each element set to Empty.
Dim DynamicArray() As Integer ' Dynamic array.
ReDim DynamicArray(10) ' Allocate storage space.
Erase DynamicArray ' Free memory used by array.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10074 次 |
| 最近记录: |