Забавный но досадный глюк
Модератор: Модераторы
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
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,
у вас с ключами компиляции в части строк явно что-то не так -- "0 entries" -- не может быть, чтобы на 1 млн символов ни разу не встретился 1 из 223 ("Я"). Подобный результат был у меня под линуксом без uses cwstring, в этом случае строка ansi интерпретировалась согласно текущей локали и уже после AnsiToUtf8 получается бред, после чего последующее тестирование смысла не имеет.
у вас с ключами компиляции в части строк явно что-то не так -- "0 entries" -- не может быть, чтобы на 1 млн символов ни разу не встретился 1 из 223 ("Я"). Подобный результат был у меня под линуксом без uses cwstring, в этом случае строка ansi интерпретировалась согласно текущей локали и уже после AnsiToUtf8 получается бред, после чего последующее тестирование смысла не имеет.
Исправил ошибку. Не было указано ru_RU.CP1251:
Добавлено спустя 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"
Код: Выделить всё
$ 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 писал(а):Исправил ошибку. Не было указано 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
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
Потому что там секунды (ненадежное измерение), а здесь тики.
Добавлено спустя 56 минут 48 секунд:
Вынь-32, типичная юзерская (моя "лошадка" на работе) машина (P4 2.4 GHz 512M) :
Разница 11..12 раз. С точки зрения использования в реальной жизни на реальным массовых компах - жуть, если честно !
Добавлено спустя 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 писал(а):секунды (ненадежное измерение)
Можно было бы для "надёжности" поменять
fpGetTimeOfDay(@t2, nil);
на
clock_gettime(CLOCK_MONOTONIC_RAW, @t2)
только, если правильно путаю, её в рантайме fpc нет, а ради подобного теста -- как из пушки по воробьям.
- debi12345
- долгожитель
- Сообщения: 5761
- Зарегистрирован: 10.05.2006 23:41:15
- Откуда: Ташкент (Узбекистан)
АФАЙК, QueryPerormanceCunter специально разработана для подобного тестирирования.
Но - вариант с измерением времени в "выни" (используется "sys_gettimeus" из МСЕ, которая - если есть мультимедейный таймер, то использует ео - иначе отталкиватся от тиков):
Опять разница порядка 12 раз. То есть на слабых машинах ситуация только ухудшается, страшно подумать что будет на АРМ-ах.
Но - вариант с измерением времени в "выни" (используется "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 раз. То есть на слабых машинах ситуация только ухудшается, страшно подумать что будет на АРМ-ах.
