背景:
我一直使用以下方法来重置它们:
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如果我用擦除
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最后,两者都重置变量。
问题:真的值得使用擦除语句吗?它是否比Redim.. As..更好地防止内存泄漏
发布于 2016-06-30 16:56:57
当有疑问时,请使用语义:
ReDim对数组进行重维Erase释放数组坚持这一点将使您的代码受益于更大的一致性,并将使您的代码意图对读者/维护者/未来-您更清楚。
发布于 2016-06-30 16:30:32
既然你问了Redim vs擦除记忆的后果.唯一的实际区别是动态数组。
如果擦除非动态数组,它会将其中的值设置为0、零长度字符串或变体的“空”值。Dim阵列(10)
如果您擦除一个动态数组,它将完全释放内存。Dim Array()
这两个选项都不应导致内存泄漏。如果循环遍历数组和代码中的redim/擦除数组部分,两者都会导致内存释放,而不是不断地扩展所使用的内存。如果您在代码中遇到内存泄漏,这可能是一个更好的问题。
从“擦除”上的帮助:
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.https://stackoverflow.com/questions/38128435
复制相似问题