Хорошо, я сделал тест с массивом вариантов и с массивом строк.Пусть оба запускаются несколько раз, и кажется, что версия с нетипизированным массивом еще немного быстрее.
Но более важный урок: сама обработка строки (а это довольно простая задача, конкатенация строки и числа) потребляет 75% времени выполнения - поэтому тип данных самого массива на самом деле неВопрос.
Дополнительное замечание: передача массива в подпрограмму по ссылке 1000 раз была настолько быстрой, что я не мог измерить ее.Передача его Вэл убила моего превосходства.Но передача массива по значению почти наверняка не то, что вы не хотите делать.
Я использовал следующий код:
Option Explicit
Private mlngStart As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Const size = 3000000
Dim startTime As Long
Public Sub StartTimer()
startTime = GetTickCount
End Sub
Public Function EndTimer() As Long
EndTimer = (GetTickCount - startTime)
End Function
Sub b1()
StartTimer
Dim i As Long
Dim s(size)
For i = 1 To size
s(i) = "ABC"
Next i
Debug.Print "untyped, size = " & size, EndTimer
End Sub
Sub b2()
StartTimer
Dim i As Long
Dim s(size) As String
For i = 1 To size
s(i) = "ABC"
Next i
Debug.Print "as string, size = " & size, EndTimer
End Sub
Результат был
untyped, size = 3000000 312
untyped, size = 3000000 313
untyped, size = 3000000 313
untyped, size = 3000000 297
untyped, size = 3000000 313
as string, size = 3000000 328
as string, size = 3000000 313
as string, size = 3000000 328
as string, size = 3000000 344
as string, size = 3000000 313
Я изменил назначение на s(i) = "ABC" & i
и получил следующий результат:
untyped, size = 3000000 922
untyped, size = 3000000 953
untyped, size = 3000000 938
untyped, size = 3000000 1015
untyped, size = 3000000 953
as string, size = 3000000 1140
as string, size = 3000000 1156
as string, size = 3000000 1157
as string, size = 3000000 1125
as string, size = 3000000 1125