Страницы: 1
RSS
Тест скорости циклов For…Next и Do…Loop, For…Next and Do…Loop cycles speedtest
 
Приветствую!
Привожу простые тесты, показывающие, что при известных границах поиска лучше использовать For…Next — он в 2 раза быстрее.
Разумеется, чем более сложные расчёты будут в теле цикла, тем менее будет заметна разница в скорости самих циклов.
Файл, скрин и код
Изменено: Jack Famous - 20.05.2022 11:09:50
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
Привожу простые тесты,
Где-то я уже видел обсуждение про For…Next и Do…Loop, только давно и где не помню
 
Цитата
Msi2102: давно и где не помню
тем более - лишним не будет сделать тему с готовыми данными  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Ещё не проверил While…Wend
Код
n = 0: t = Timer
    While n < cyc 
        n = n + 1: res = n
    Wend
Debug.Print "While…Wend", Format$(Timer - t, "0.0")


Собственно время как у Do
 
Не, ну а как иначе-то? В Дулупе проверка каждый раз идет, а в Форнексте просто счетчик
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
_Boroda_ написал:
роверка каждый раз идет
Если добавить условие
Код
c = 0
n = 0: t = Timer
    For n = 1 To cyc
        If c >= 0 Then c = n
        res = n
    Next n
Debug.Print "For…Next", Format$(Timer - t, "0.0")

Всё равно быстрее
А с таким условием уже нет
Код
c = 0
n = 0: t = Timer
    For n = 1 To cyc
        If c >= 0 Then c = c + 1
        res = n
    Next n
Debug.Print "For…Next", Format$(Timer - t, "0.0")
Изменено: Msi2102 - 20.05.2022 13:01:05
 
Цитата
_Boroda_: В Дулупе проверка каждый раз идет, а в Форнексте просто счетчик
всё верно - никаких неожиданностей, просто в 2 раза разница не была ожидаема от простого счётчика даже на 100 млн))
100 млн хоть и кажется нереальным циклом, однако есть рекурсия и прочие вложенные циклы — в комбинаторике, например. В таком случае, и большее количество итераций вполне возможно

Msi2102, благодарю за дополнительные тесты  :idea:
While…Wend, помнится, хуже себя показал на рекурсии, чем Do…Loop — потому я нигде его и не использую  :)
Изменено: Jack Famous - 20.05.2022 13:16:01
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх