Забавный но досадный глюк

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Забавный но досадный глюк

Сообщение debi12345 » 21.04.2013 16:17:55

Ключевой вопос - ПОЧЕМУ такое разное количество найденных вхождений при одинаковом коде ? UTF8 (точнее StrPos) особенно быстра когда ничего не находит :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Забавный но досадный глюк

Сообщение Brainenjii » 21.04.2013 16:52:16

Brainenjii@linux:~> LANG=ru_RU.CP1251 /tmp/project1
UTF-8: 0 entries in 0.167163 seconds.
UTF-16: 0 entries in 0.374190 seconds.
UTF-32: 0 entries in 0.409782 seconds.
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Забавный но досадный глюк

Сообщение bormant » 21.04.2013 19:30:13

Brainenjii,
у вас с ключами компиляции в части строк явно что-то не так -- "0 entries" -- не может быть, чтобы на 1 млн символов ни разу не встретился 1 из 223 ("Я"). Подобный результат был у меня под линуксом без uses cwstring, в этом случае строка ansi интерпретировалась согласно текущей локали и уже после AnsiToUtf8 получается бред, после чего последующее тестирование смысла не имеет.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Забавный но досадный глюк

Сообщение hovadur » 21.04.2013 21:58:27

Исправил ошибку. Не было указано ru_RU.CP1251:
Код: Выделить всё
$ LANG=ru_RU.CP1251 ./utf8test
UTF-8:  452700 entries in 0.783593 seconds.
UTF-16: 452700 entries in 0.247310 seconds.
UTF-32: 452700 entries in 0.264096 seconds.


Добавлено спустя 2 минуты 34 секунды:
Че-то я не понимаю. Как от локали может зависеть?

Добавлено спустя 4 минуты 55 секунд:
А понял я :)

Добавлено спустя 5 минут 55 секунд:
Brainenjii тебе надо сделать локаль ru_RU.CP1251. В ubuntu надо добавить строчку "ru_RU.CP1251 CP1251" в файл "/var/lib/locales/supported.d/local" и выполнить команду "sudo dpkg-reconfigure locales"
hovadur
постоялец
 
Сообщения: 116
Зарегистрирован: 31.01.2013 15:50:41

Re: Забавный но досадный глюк

Сообщение SeZuka » 22.04.2013 05:02:27

hovadur писал(а):Исправил ошибку. Не было указано ru_RU.CP1251:
Код: Выделить всё
$ LANG=ru_RU.CP1251 ./utf8test
UTF-8:  452700 entries in 0.783593 seconds.
UTF-16: 452700 entries in 0.247310 seconds.
UTF-32: 452700 entries in 0.264096 seconds.

Не пойму, почему на линухе разница меньше, у вас UTF-8/UTF-16 = 3.17, у меня 7.7
Код: Выделить всё
UTF-8:  452700 entries in 4552286 ticks.
UTF-16: 452700 entries in 576081 ticks.
UTF-32: 452700 entries in 627309 ticks.

i5-3450 3.1GHz Win 7 x32
SeZuka
постоялец
 
Сообщения: 209
Зарегистрирован: 05.09.2012 14:58:05

Re: Забавный но досадный глюк

Сообщение debi12345 » 22.04.2013 09:08:24

Потому что там секунды (ненадежное измерение), а здесь тики.

Добавлено спустя 56 минут 48 секунд:
Вынь-32, типичная юзерская (моя "лошадка" на работе) машина (P4 2.4 GHz 512M) :
C:\...ttings\Администратор\fpc_project\utf8_speed>utf_test1.exe
UTF-8:а 452700 entries in 14149081 ticks.
UTF-16: 452700 entries in 1293338 ticks.
UTF-32: 452700 entries in 1281988 ticks.

Разница 11..12 раз. С точки зрения использования в реальной жизни на реальным массовых компах - жуть, если честно !
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Забавный но досадный глюк

Сообщение bormant » 22.04.2013 10:35:27

debi12345 писал(а):секунды (ненадежное измерение)
Действительно :shock: ?
Можно было бы для "надёжности" поменять
fpGetTimeOfDay(@t2, nil);
на
clock_gettime(CLOCK_MONOTONIC_RAW, @t2)
только, если правильно путаю, её в рантайме fpc нет, а ради подобного теста -- как из пушки по воробьям.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Забавный но досадный глюк

Сообщение debi12345 » 22.04.2013 11:50:07

АФАЙК, QueryPerormanceCunter специально разработана для подобного тестирирования.
Но - вариант с измерением времени в "выни" (используется "sys_gettimeus" из МСЕ, которая - если есть мультимедейный таймер, то использует ео - иначе отталкиватся от тиков):
C:\...ttings\Администратор\fpc_project\utf8_speed>utf_test1.exe
UTF-8:а 452700 entries in 3985000 microseconds.
UTF-16:а 452700 entries in 328000 microseconds.
UTF-32:а 452700 entries in 359000 microseconds.

Опять разница порядка 12 раз. То есть на слабых машинах ситуация только ухудшается, страшно подумать что будет на АРМ-ах.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5752
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 117

Рейтинг@Mail.ru