Ускорить СтрЗаменить

1. dobrotank 23.06.20 16:43 Сейчас в теме
Пишу интеграционный модуль в виде внешней обработки. Столкнулся с тем, что при увеличении объёма данных сильно падает производительность. Сделал замер производительности и по нему получилось, что больше всего времени занимают процедуры и функции с использованием СтрЗаменить. Как можно ускорить замену символов в строках? Регулярные выражения не предлагать, производительность только падает.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. Sashares 34 23.06.20 17:42 Сейчас в теме
(1) Как вариант, можно попробовать использовать текстовый документ.
То есть создать текстовый документ, разделить исходные данные на строки, например, по точке или переносу строки.
И записать в текстовый документ.

Обрабатывать построчно текстовый документ.
Потом собрать полный текст через ПолучитьТекст().
Смысл - уменьшить размер обрабатываемых строк,
т.к. для больших строк любые действия с ними выполняются значительно дольше.

Еще вариант - если замена символов 1 на 1, то использовать СтрРазделить() и СтрСоединить().
7. dobrotank 23.06.20 18:52 Сейчас в теме
(6)Строки итак короткие. А про СтрРазделить() и СтрСоединить() не понял, можно поподробнее?
9. Sashares 34 23.06.20 19:02 Сейчас в теме
(7) Пример:
МояСтрока = СтрСоединить(СтрРазделить(МояСтрока,"а"),"б");

Заменит все символы "а" на символы "б".

МояСтрока = СтрСоединить(СтрРазделить(МояСтрока,"а123"),"б");

Заменит все символы "а", "1", "2", "3" на символ "б".
16. dobrotank 25.06.20 16:55 Сейчас в теме
(9)Попробовал, не ускорило, даже немножко замедлило. В любом случае, спасибо, нашлось подходящее решение без ускорения замены.
13. lmnlmn 69 23.06.20 20:22 Сейчас в теме
(1) Полагаю что сам процесс замены символов не ускорить. А вот пересмотреть алгоритм обработки этих строк можно. Обычно делают последовательно вызов нескольких СтрЗаменить что приводит бесполезным операциям чтения всей строки.
2. VictorRGB2 13 23.06.20 17:02 Сейчас в теме
отказаться от использования метода
пострадает унификация, но в скорости выиграете однозначно

если конечно отказаться вообще возможно
3. dobrotank 23.06.20 17:24 Сейчас в теме
(2)Нет, отказаться невозможно.
5. VictorRGB2 13 23.06.20 17:38 Сейчас в теме
(3) вот цена некоего универсального алгоритма
я бы проанализировал использование, число повторных вызовов и попробовал таки отказаться, раз сильно тормозить начинает
схему отказа разные есть, от тупого клонирования кода с различиями до кеширования, как в (4) советуют или введения справочника\регистра соответствия
4. ImHunter 315 23.06.20 17:26 Сейчас в теме
Можно попробовать кешировать в соответствие, если повторов много.
8. dobrotank 23.06.20 18:52 Сейчас в теме
(4)Что кешировать? Почему в соответствие?
11. Sashares 34 23.06.20 20:13 Сейчас в теме
(8)если у вас много данных, которые надо обрабатывать, то возможно, можно закешировать входящие данные и результат их обработки.
То есть если во входящих данных А1, А2, Б1, Б2, А1, А2 - и они каким-то образом преобразуются, то если результат преобразования всегда одинаковый, то можно закешировать результат - создать соответствие, где ключ - входящие данные, значение - результат преобразования.
И перед преобразование проверять - если в соответствии есть уже результат, то никакое преобразование делать уже не требуется, берите из соответствия результат, а если результата нет, то преобразовывать и добавлять в соответствие.

Получится, что для входящих данных А1, А2, Б1, Б2 - будет выполнено преобразование как должно и добавлено в соответствие, а для следующих А1, А2 - уже будет результат получен из соответствия, и преобразования не будет.
12. Sashares 34 23.06.20 20:15 Сейчас в теме
(8)
Почему в соответствие?

Потому что ключом может быть все что угодно.
10. -AI- 23.06.20 19:37 Сейчас в теме
а если использовать СтрШаблон() не будет быстрее?
14. -AI- 23.06.20 20:45 Сейчас в теме
(10) Короче, если исходная строка динамическая, а код большой и логика сложная...
то надо например в структуру заталкать все параметры, а потом за один проход, с помощью СтрШаблон() сделать подстановку всех параметров...
15. triviumfan 93 24.06.20 17:27 Сейчас в теме
Ускорить СтрЗаменить?) Тут нечего ускорять. Неужели не понятно, что нужно оптимизировать свой корявый алгоритм?! :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот