Основная цель: я пытаюсь хранить и манипулировать "БОЛЕЕ 90000!" товары в памяти из файла csv (одна строка, один товар).
Для каждого продукта я создаю объект. Этот объект имеет несколько строковых и целочисленных полей:
Option Explicit
Private m_name As String
Private m_price As Integer
Private m_description As String
Private m_amount As Integer
Property Get name() As String
name = m_name
End Property
Property Let name(value As String)
m_name = value
End Property
Property Get price() As Integer
price = m_price
End Property
Property Let price(value As Integer)
m_price = value
End Property
Property Get description() As String
description = m_description
End Property
Property Let description(value As String)
m_description = value
End Property
Property Get amount() As Integer
amount = m_amount
End Property
Property Let amount(value As Integer)
m_amount = value
End Property
Проблема: создать этот объект относительно быстро, но требуется много времени, чтобы очистить / освободить их, либо с помощью set = nothing
, либо просто в конец суб. Вот фрагмент тестового кода, который подсчитывает время, затраченное на прецессию:
Option Explicit
'64 bit Version with "PtrSafe"
Public Declare PtrSafe Function GetTickCount Lib "kernel32.dll" () As Long
Sub TestSub()
Dim t As Long
t = GetTickCount
'Start test code.
TestFunction
'End test code.
Debug.Print GetTickCount - t, , "To delete"
End Sub
Sub TestFunction()
Dim t As Long
t = GetTickCount
'Start test code.
Dim testArray(99999) As TestProduct
Dim i As Long
Dim product As TestProduct
For i = 0 To 99999
Set testArray(i) = New TestProduct
Next
'End test code.
Debug.Print GetTickCount - t, , "To create"
End Sub
Вывод (миллисекунды):
235 To create
7250 To delete
Как видите, для освобождения файла требуется почти 8 секунд. память в конце функции / подп. Я получаю тот же результат, когда использую этот код Redim testArray(0)
для очистки массива.
Есть ли лучший способ сохранить эту информацию в памяти? Может быть, с массивами или ADODB.recordset? Я использую ADODB.Stream для построчного чтения CSV-файла в кодировке UTF-8 и хранения информации в объектах.
Спасибо за вашу помощь!