Оптимизация splitDisassembledString()
-
Напишем функцию, которая в 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 кодом.
Если заинтересовали регулярки: ссылка