1

那里的专家-快速提问...

在 Excel VBA 中,我创建了一个包含 4 个字符串变量的类 - 没有构造函数,没有别的。

现在,在我的代码中,我正在遍历一个 ENORMOUS 数组(100k + 次迭代)不断创建类的新实例,为其变量分配值,使用它然后将其分配给 MyClass = nothing。然后再次循环:

Dim x As New MyClass
Set x = Nothing

For i = 0 to 1000000
   x.Var1 = "XYZ"
   x.Var2 = "abc"
   x.Var3 = "123"
   x.Var4 = 456

... Use x ...

Set x = Nothing

Next i

鉴于这种用法,将 x 定义为类或公共类型会更节省内存吗(或者它真的没有区别)?

谢谢!!

4

1 回答 1

3

他们按照你写的方式,使用类肯定会比类型花费更长的时间(在我的机器上长 5 倍)。这是因为当您销毁类时,您会不断地重新分配和重新分配内存。不过,您可能不需要销毁该类,只需将其保存在内存中并更改其属性即可。这

Sub test3()

    Dim x As CMyClass
    Dim i As Long
    Dim lStart As Long

    lStart = Timer

    Set x = New CMyClass

    For i = 0 To 1000000
       x.Var1 = "XYZ"
       x.Var2 = "abc"
       x.Var3 = "123"
       x.Var4 = 456
    Next i

    Debug.Print Timer - lStart

End Sub

花费与 UDT 相同的时间,因为该类仅创建一次,并且仅在超出范围时才被销毁。除非有必要将其设置为 Nothing - 如果您可以使用 Type 代替它,您可能不会这样做 - 那么您不应该这样做。在这种情况下,看起来您可以使用 Type 或 Class 并获得相同的性能。

于 2012-10-09T20:03:08.700 回答