Добрый вечер.Задался вопросом.Есть диапазон,допустим А1:А100 ,объявляем его как массив(arr),какой цикл перебора быстрее. For Each In; For 1 To 100 ; For 1 To UBound . Насколько большая разница между ними,ведь диапазон (массив) находится в памяти и обращений к листу не будет?
Добрый вечер.Задался вопросом.Есть диапазон,допустим А1:А100 ,объявляем его как массив(arr),какой цикл перебора быстрее. For Each In; For 1 To 100 ; For 1 To UBound . Насколько большая разница между ними,ведь диапазон (массив) находится в памяти и обращений к листу не будет?megavlom
For Each x In a Debug.Print x Next MsgBox Timer - tm
tm = Timer For i = 1 To 100 Debug.Print a(i, 1) Next MsgBox Timer - tm
tm = Timer For i = 1 To UBound(a) Debug.Print a(i, 1) Next MsgBox Timer - tm End Sub
Быстрее For Each x In a получается, но в реальности массивы из одного столбца редко бывают, и часто там тоже счётчик добавляют, чтоб работу делать...
А померить ?
Code
Sub test() Dim a, x, i, tm
a = [a1:a100] tm = Timer
For Each x In a Debug.Print x Next MsgBox Timer - tm
tm = Timer For i = 1 To 100 Debug.Print a(i, 1) Next MsgBox Timer - tm
tm = Timer For i = 1 To UBound(a) Debug.Print a(i, 1) Next MsgBox Timer - tm End Sub
Быстрее For Each x In a получается, но в реальности массивы из одного столбца редко бывают, и часто там тоже счётчик добавляют, чтоб работу делать...Hugo
Hugo, я думаю объектная коллекция все таки медленне массива. Опять же если массив тип Variant, будет медленне однородного с объявленным типом. Но это догадки - не проверял...
Hugo, я думаю объектная коллекция все таки медленне массива. Опять же если массив тип Variant, будет медленне однородного с объявленным типом. Но это догадки - не проверял...VovaK
Всем удачи. У нас все получится. С уважением, Владимир.
Да в общем я особо не заморачиваюсь - бывает и for each использую, если столбец один... Кода писать меньше Ну а если параллельно с перебором нужно отслеживать индекс - то всё равно i считать...
Да в общем я особо не заморачиваюсь - бывает и for each использую, если столбец один... Кода писать меньше Ну а если параллельно с перебором нужно отслеживать индекс - то всё равно i считать...Hugo