runewalsh писал(а):if UTF8CharacterToUnicode(StartBytePos, CharLen) = 32 then
Приведенный Вами алгоритм является наглядным примером подлога. Во-первых, он строго адаптирован к конкретному тесту, и сравнение с кодом пробела - это частный, а не общий случай, так что не везде применишь. Но самое главное, Вы выполнили преобразование из UTF8, в UTF32. Таким образом, Вы не смогли решить задачу в постановке UTF8. Возникает вопрос, а на кой нужен UTF8, если он без UTF32 замедляет в 30 раз, а в комбинации с UTF32 замедляет в 5 раз?
Сравнил i7 3770K c Atom N270, последний всего в 3 раза медленнее. То есть за счет аппаратуры проблему не решить.
Упертость отдельных личностей вызывает только смех. Можно биться головой об стену, можно в каждом частном случае выискивать оптимальные алгоритмы, можно переписать весь наследуемый код. Вопрос зачем это, кроме как для мазахистских извращений?
В любом случае лаконичнее код:
По сравнению с кодом:
Код: Выделить всё
if UTF8CharacterToUnicode(StartBytePos, CharLen) = 32 then
Inc(TestCount);
StartBytePos := StartBytePos + CharLen;