|
|
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovГирлионайльдоЕсли заменить string на AnsiString то норм. Подправь это расхождение. Ато принимаешь AnsiString а возвращаешь string Спасибо, поправил. Исправленная версия: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. боги индусского кода )))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 15:44 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
defecator, на самом деле это очень полезная функция, через нее можно делать всевозможные перекодировки, upper/lower и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 16:02 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahovdefecator, на самом деле это очень полезная функция, через нее можно делать всевозможные перекодировки, upper/lower и т.п. LCMapString(Ex) еще более полезная функция, а главное - она уже написана и оттестирована. А на все остальное с лихвой хватает StringReplace. Саша, при всем к тебе уважении, рассчитывать на включение такого кода в более или менее серьезный проект - это слишком радужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 19:27 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schi, так это, стреляли... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 19:47 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Игорь, сейчас ради интереса сравнил скорость с AnsiUpperCase, она отличается на порядок, но это, конечно, фигня, недостойная включения в более-менее серьезный проект ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2018, 21:06 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr SharahovИгорь, сейчас ради интереса сравнил скорость с AnsiUpperCase, она отличается на порядок, но это, конечно, фигня, недостойная включения в более-менее серьезный проект ) А кому она нужна, эта скорость AnsiUpperCase в более или менее серьезном проекте ? Правильно - никому. Потому что в серьезных проектах все уже давно перешли на юникод ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2018, 10:43 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiAleksandr SharahovИгорь, сейчас ради интереса сравнил скорость с AnsiUpperCase, она отличается на порядок, но это, конечно, фигня, недостойная включения в более-менее серьезный проект ) А кому она нужна, эта скорость AnsiUpperCase в более или менее серьезном проекте ? Правильно - никому. Потому что в серьезных проектах все уже давно перешли на юникод Тебе, конечно, видней. Ты ведь знаешь все более или менее серьезные проекты и все, что им нужно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2018, 10:55 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiА кому она нужна, эта скорость AnsiUpperCase в более или менее серьезном проекте ? Правильно - никому. Потому что в серьезных проектах все уже давно перешли на юникод Внезапно в юникодных дельфях AnsiUpperCase работает с ... юникодом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2018, 12:13 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiПотому что в серьезных проектах все уже давно перешли на юникодсразу вспоминается jep 254. надо бы попросить еще поддержку 7-битных строк ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 10:51 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
schiА на все остальное с лихвой хватает StringReplace. В более новых версия ее подрихтовали, но вплоть до ХЕ2 на нее было не взглянуть без слез. Убийца производительности. А уж для замены или удаления символов ее юзать - разве что на очень нетребовательных проектах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 11:21 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Василий 2schiА на все остальное с лихвой хватает StringReplace. В более новых версия ее подрихтовали, но вплоть до ХЕ2 на нее было не взглянуть без слез. Убийца производительности. А уж для замены или удаления символов ее юзать - разве что на очень нетребовательных проектах. Я, за более чем 35 лет программирования, ни разу не видел, чтобы в информационных системах узким местом в производительности была замена символов. Возможно, мне не повезло ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 11:45 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Еще вариант с чтением четверками (замена по месту, строки родные). Начинает обходить простейший for с длины строки 5, прирост становится больше с увеличением длины, но не превышает 50%. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2018, 15:55 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
"Ну куда он, куда он гонится? Неужель он не знает, что живых коней Победила стальная конница?" https://godbolt.org/g/zgmGz8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 19:23 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, было бы интересно увидеть завершенную процедуру на Delphi (BASM) и замерить скорость. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 19:36 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, Вручную конвертировать под дельфийский ассемблер - дурное занятие, недавно была ветка про линковку сишного кода. Для 64 бит: {$LINK 'clang_sse.o'} procedure ReplaceChr(s : PAnsiChar; Cnt : Integer; FromChar, ToChar : AnsiChar); cdecl; external; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 19:53 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, ну ладно, будет время проверю при случае. Ща проверил свои поделки на СЕ. Ассемблерный выхлоп из-под СЕ оказался медленнее, чем из-под D7, основной цикл на 16 байт длиннее. Ускорение по сравнению с RTL уменьшилось с 7-9 раз всего до 3 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 20:16 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Если надо 32 бита, то могу предложить только в виде dll-ки, 32-битные obj так запросто не линкуются и конверсия в omf почему-то не помогает. procedure ReplaceChr(s : PAnsiChar; Cnt : Integer; FromChar, ToChar : AnsiChar); cdecl; external 'gcc_sse32.dll'; Aleksandr SharahovАссемблерный выхлоп из-под СЕ оказался медленнее, чем из-под D7Там же FPC в качестве компилятора Паскаля, все претензии ему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 22:48 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, Код: pascal 1. А во вторых ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:01 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
SaperskyЕсли надо 32 бита, то могу предложить только в виде dll-ки, 32-битные obj так запросто не линкуются и конверсия в omf почему-то не помогает. procedure ReplaceChr(s : PAnsiChar; Cnt : Integer; FromChar, ToChar : AnsiChar); cdecl; external 'gcc_sse32.dll'; Aleksandr SharahovАссемблерный выхлоп из-под СЕ оказался медленнее, чем из-под D7Там же FPC в качестве компилятора Паскаля, все претензии ему. http://www.sql.ru/forum/actualfile.aspx?id=21602858] Приложенный файл (Str_Replace_dll32.zip - 132Kb) это чудовищно. замена символа превратилась в монстра ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:04 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
pblendvb это из 4.2 судя из https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=pblendvb&expand=432,432 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:05 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Гирлионайльдо, да, SSE4 нужен. И нет, s там просто указатель, без var. авторзамена символа превратилась в монстра Это просто для тестирования, так-то можно и компактнее. 2 системных dll-ки - багофича последних версий gcc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:15 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Sapersky, результат в ms под D7 (в цикле 20000 раз массив 1024 строк длиной 9..99): Код: pascal 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:17 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, забыл привести исходник: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2018, 23:32 |
|
||
|
Быстрая замена символа
|
|||
|---|---|---|---|
|
#18+
Aleksandr Sharahov, По-моему на коротких строках начинает упираться в дельфийскую обвязку, все эти UniqueString и т.д. Т.е. если делать в цикле так: ReplaceChr(@s[1], c, ',', '.'); то быстро, а если так: s1 := s; ReplaceChr(@s1[1], c, ',', '.'); то медленнее в 10 раз (UniqueString создаёт новую строку, а в первом случае нет). Возможно это более жизненный сценарий, но получается, что тестируем в основном оптимальность перераспределения памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2018, 00:04 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39679259&tid=2040575]: |
0ms |
get settings: |
11ms |
get forum list: |
22ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
202ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
93ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 602ms |

| 0 / 0 |
