Рассмотрим этот код:
function Foo(ds as OtherDLL.BaseObj)
dim lngRowIndex as long
dim lngColIndex as long
for lngRowIndex = 1 to ubound(ds.Data, 2)
for lngColIndex = 1 to ds.Columns.Count
Debug.Print ds.Data(lngRowIndex, lngColIndex)
next
next
end function
ОК, немного контекста.Параметр ds
имеет тип OtherDLL.BaseObj, который определен в указанной ActiveX DLL.ds.Data
- это вариант двумерного массива (одно измерение содержит данные, другое - индекс столбца. ds.Columns
- это коллекция столбцов в 'ds.Data`.
Предполагается, что вкак минимум 400 строк данных и 25 столбцов, этот код занимает около 15 секунд для запуска на моем компьютере. Это невероятно.
Однако, если я скопирую вариантный массив в локальную переменную, так:
function Foo(ds as OtherDLL.BaseObj)
dim lngRowIndex as long
dim lngColIndex as long
dim v as variant
v = ds.Data
for lngRowIndex = 1 to ubound(v, 2)
for lngColIndex = 1 to ds.Columns.Count
Debug.Print v(lngRowIndex, lngColIndex)
next
next
end function
все это обрабатывается практически в любое заметное время (в основном близкое к 0).
Почему?