임베디드 MCU에서 실행되는 lua에 vt100 (oldschool 터미널)을 구현하고 있습니다. 성능이 문제입니다.문자열 집합을 검색하여 첫 번째 일치 항목을 반환합니다.
Given은 여러 개의 (예측할 수없는 숫자) 문자를 포함하는 문자열 (입력 라인)입니다. 이 문자열에서 일련의 문자 중 첫 번째 일치 항목을 찾고 싶습니다. 예를 들어
:
-- ASCII value(hex) of keyboard keys.
#define KEY_UP "\x41"
#define KEY_DOWN "\x42"
#define KEY_RIGHT "\x43"
#define KEY_LEFT "\x44"
-- terminal object is defined and created
function terminal:receive()
-- Set buffer and shorthand to self.port.read
local read = function() return self.port:read() end
local received = ""
while true do
-- Read Input
local line = read()
if (not line) then break end
received = received .. line
-- Search for the key.
-- Don't search in line, due different baudrates might not
-- Get the entire digit at once.
if (received:find(KEY_UP)) then
return KEY_UP
elseif (received:find(KEY_DOWN)) then
return KEY_DOWN
... and so on
end
end
end
내 예제에서이 솔루션은 확실히 좀 느립니다. 보다 성능이 뛰어난 솔루션을 찾는 것이 그리 어렵지 않습니다. 그러나 이것에 가장 효과적인 해결책은 무엇입니까?
프로필러를 사용 했습니까? 패턴 매칭 부분이 성능 병목 현상입니까? –
아마도 그렇지는 않지만 또 다른 질문입니다. – Sempie
40 개의 키를 찾고 있기 때문에 첫눈에 맞춰야합니다. 일치 항목이 첫 번째 키 중 하나 인 경우 확실히 빠르며 수신 프로세스가 병목 현상 일 수 있습니다. 그러나 일치하는 항목이 없으면 40 개의 find()가 있습니다. 두 개의 ticks가 필요합니다. – Sempie