Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотра
    15 632

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


MasterGH

1 149 просмотров

Скрытый текст

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

 

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

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.