Skip to content
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Collapse
Brand Logo

CELua[RU]

  1. Главная
  2. Программирование
  3. Обучающие примеры
  4. Сравнение времени выполнения двух функций

Сравнение времени выполнения двух функций

Запланировано Прикреплена Закрыта Перенесена Обучающие примеры
обучалкаce luaoptimization
2 Сообщения 1 Posters 35 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • MasterGHM Не в сети
    MasterGHM Не в сети
    MasterGH Администраторы
    написал в отредактировано MasterGH
    #1
    function NoOptimizeCode()
       --[[Предположительно не оптимизированный код]]--
    end
    
    function OptimizeCode()
       --[[Предположительно оптимизированный код]]--
    end
    
    local countRepeat = 10000000
    local x1 = 0
    local x2 = 0
    
    x1 = os.clock()
    for i = 1, countRepeat do NoOptimizeCode() end
    x2 = os.clock()
    for i = 1, countRepeat do OptimizeCode() end
    
    local deltaTimeOptimize = (os.clock() - x2)
    local deltaTimeNoOptimize = (x2 - x1)
    
    print(string.format("%.2f\n",  deltaTimeNoOptimize/deltaTimeOptimize))
    

    Пример1. Узнать во сколько раз string.match() медленее string.find()

    function NoOptimize()
       if string.match('mov eax, [edx]', 'edx') then
       end
    end
    
    function Optimize()
       if string.find('mov eax, [edx]', 'edx') then
       end
    end
    

    Пример2. Создание лишней локальной переменной

    local tableA = {'A', 'B', 'C'}
    
    function NoOptimize()
       local t = #tableA
       for i = 1, t do
    
       end
    end
    
    function Optimize()
       for i = 1, #tableA do
    
       end
    end
    

    Ответы: 1.38, 1.04.

    Если значение меньше единицы, то оптимизированный код хуже.
    Если значение больше единицы, то стоит использовать более оптимизированный вариант.

    Для простого поиска лучше использовать string.find чем string.match.

    Еще несколько примеров

    tableA = {'A', 'B', 'C'}
    local tableB = {'A', 'B', 'C'}
    
    function NoOptimize()
       for i = 1, #tableA do
    
       end
    end
    
    function Optimize()
       for i = 1, #tableB do
    
       end
    end
    

    1.14
    К локальной таблице доступ быстрее

    function NoOptimize()
     tableA = {'A', 'B', 'C'}
    end
    
    function Optimize()
     local tableB = {'A', 'B', 'C'}
    end
    

    Создание новой глобальной и новой локальной таблицы.
    1.08

    Для чего может пригодиться. Может пригодиться при оптимизации кода трассировке на брейкпоинтах в пошаговой отладке

    1 ответ Последний ответ
    0
  • MasterGHM Не в сети
    MasterGHM Не в сети
    MasterGH Администраторы
    написал в отредактировано
    #2

    С точностью до тысячной доли секунды можно посчитать задержку выполнения кода, что можно применить как счет производительности.

    local x = os.clock()
    local s = 0
    for i=1,100000 do s = s + i end
    print(string.format("elapsed time: %.3f\n", os.clock() - x))
    

    После выполнения, показывает 2 тысячных секунды или 2 мс

    elapsed time: 0.002
    

    Можно посчитать прошедшее время для другой цели. Например, если цикл в отладке выполняется более 3 секунд, то это вероятно корневой цикл, а если менее, то это вложенный цикл. На корневом цикле можно остановить трейслог. Об этом может быть потом напишу.

    1 ответ Последний ответ
    0

Powered by NodeBB | Contributors
СeLua[RU] 2024©
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы