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

    Перенесена Статьи и видео обучалка ce lua optimization
    2
    0 Голоса
    2 Сообщения
    143 Просмотры
    MasterGHM
    С точностью до тысячной доли секунды можно посчитать задержку выполнения кода, что можно применить как счет производительности. 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 секунд, то это вероятно корневой цикл, а если менее, то это вложенный цикл. На корневом цикле можно остановить трейслог. Об этом может быть потом напишу.
  • Оптимизация splitDisassembledString()

    Перенесена Статьи и видео ce lua optimization фишки
    1
    0 Голоса
    1 Сообщения
    680 Просмотры
    MasterGHM
    Напишем функцию, которая в 3.2 раз быстрее splitDisassembledString(disassemble(address)) \-- Линия: 0045464A - FF 05 A4B54500 - inc [0045B5A4] { [000003EA] } function GetDebugString(address) return splitDisassembledString(disassemble(address)) end \-- address, bytes, opcode function GetDebugString2(address) local clearString = string.gsub(disassemble(address), '%s','') return string.match(clearString, '^(.-)%-(.-)%-(.-)$') end function NoOptimizeCode() GetDebugString(0x0045464A) end function OptimizeCode() GetDebugString2(0x0045464A) end local countRepeat = 100000 -- add more cycle local x1 = 0 local x2 = 0 x1 = getTickCount() for i = 1, countRepeat do NoOptimizeCode() end x2 = getTickCount() for i = 1, countRepeat do OptimizeCode() end print(string.format("%.2f", (x2 - x1)/(getTickCount() - x2)) ) Сравнивая скорости получаем оптимизацию в ~3.20 раза быстрее. Пример использования function GetDebugString2(address) local clearString = string.gsub(disassemble(address), '%s','') return string.match(clearString, '^(.-)%-(.-)%-(.-)$') end local address, bytes, opcode = GetDebugString2(0x0045464A) print(address) print(bytes) print(opcode) gsub очищает пробелы, а выражение '^(.-)%-(.-)%-(.-)$' позволит захватить данные между тире в строке. Может пригодится, когда трейсим своим Lua кодом. Если заинтересовали регулярки: ссылка