Интересная штука: в качестве переменной для результата Split'а- "жирная" (по весу) вариативная почти в 2 раза быстрее узко заточенного динамического строкового (другие не подходят) массива
Option Explicit
'====================================================================================================
Sub Test()
Dim x, spl() As String, t!, n&
t = Timer
For n = 1 To 1000000
x = Split("1 2 3 4 5") ' 0.5
' spl = Split("1 2 3 4 5") ' 0.9
'
' x = Split("a b c d e") ' 0.5
' spl = Split("a b c d e") ' 0.9
Next n
Debug.Print Timer - t
End Sub
'====================================================================================================
Добавил проверку текста и немного по-другому прогнал
Код
Sub Test()
Dim t!, n&, f As Boolean
Dim tx$, l&, bt As Byte, bl As Boolean
l = 1: bt = 1: bl = True
t = Timer
For n = 1 To 100000000
' f = (l = 1) ' 0.7
' If l = 1 Then f = True ' 0.9
' If l Then f = True ' 1.15
' f = (bt = 1) ' 0.8
' If bt = 1 Then f = True ' 1
' If bt Then f = True ' 1.14
' f = bl ' 0.6
' f = (bl = True) ' 0.7
' If bl Then f = True ' 0.8
' If bl = True Then f = True ' 1
' f = (tx = "") ' 1.39
' If tx = "" Then f = True ' 1.59
' If tx = vbNullString Then f = True ' 1.68
' If tx = Empty Then f = True ' 2.27
Next n
Debug.Print Timer - t, f
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
New: под массив строк выделяется дофигища памяти сразу
так размер же не задан - значит не дофигища
Мне кажется, что тормозить начинает после ПЕРВОГО шага - то есть тормоза возникают при заполнении уже заполненного массива, а не пустого Проверить это, замерив 1 прогон не получится, а как по-другому — я не знаю
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Если взять достаточно длинную строку (аргумент Split), то время будет отличаться не существенно. Вероятно, для массива строк (spl) при присвоении делаются необходимые проверки.
Очистка памяти производится в фоновом режиме (в том числе, и после фиксации окончания работы макроса).
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄