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 に答える