Excel VBA - установить коллекцию = ничто не займет в 100 раз больше времени, чем создание коллекции - PullRequest
0 голосов
/ 09 января 2019

извините, если подобное уже было опубликовано - я не смог его найти.

У меня должна быть коллекция классов, каждый из которых содержит коллекцию классов. Ожидается, что в коллекции будет несколько сотен тысяч записей.

Я считаю, что на создание всех коллекций уходит ~ 1 секунда, но потом на их удаление уходит ~ минуты.

Ниже приведен фрагмент случайного кода, который создает проблему, которую я вижу.

Это ожидается? Почему удаление коллекций и их создание занимает ~ 100 раз дольше? Есть ли способ ускорить его?

Спасибо

Module1:

Private p_main_collection As Collection

Sub main()

Debug.Print "Starting: " & Now()

    Set p_main_collection = New Collection

    Dim i As Long
    Dim j As Long

    Dim v_class1 As Class1
    Dim v_class2 As Class2

    For i = 1 To 8

        Set v_class1 = New Class1
        p_main_collection.Add v_class1

        v_class1.Num = i

        For j = 1 To 50000

            Set v_class2 = New Class2
            v_class2.Num = j

            v_class1.add_to_collection = v_class2

        Next j

    Next i

Debug.Print "Deleting: " & Now()
    Set p_main_collection = Nothing
Debug.Print "Deleted: " & Now()

End Sub

Class1

Private p_num As Integer
Private p_collection As Collection

Private Sub Class_Initialize()
    Set p_collection = New Collection
End Sub

Public Property Let Num(p_num_in As Integer)
    p_num = p_num_in
End Property

Public Property Get Num() As Integer
    Num = p_num
End Property

Public Property Let add_to_collection(p_collection_in As Class2)
    p_collection.Add p_collection_in
End Property

Class2

Private p_num As Long

Public Property Let Num(p_num_in As Long)
    p_num = p_num_in
End Property

Public Property Get Num() As Long
    Num = p_num
End Property

Результат

Starting: 08/01/2019 23:15:01
Deleting: 08/01/2019 23:15:02
Deleted: 08/01/2019 23:16:19
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...