|
Как "уронить" ДО или как оптимизировать такой код? | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
11.10.22
✎
16:00
|
Функция ЗаменитьСпецСимволыHTML(Строка, СпецСимволыСоотв = Неопределено) Экспорт
СоответствиеСпецСимволов = РаботаС_HTMLПовтИсп.ПолучитьСоответствиеСпецСимволов(); ЗаменитьСпецСимволHTML(Строка, 38, "amp"); НоваяСтрока = ""; Для Поз = 1 По СтрДлина(Строка) Цикл Код = КодСимвола(Строка, Поз); ИмяСимвола = СоответствиеСпецСимволов.Получить(Код); Если ИмяСимвола = Неопределено Тогда НоваяСтрока = НоваяСтрока + Символ(Код); Иначе НоваяСтрока = НоваяСтрока + "&" + ИмяСимвола + ";"; КонецЕсли; КонецЦикла; Строка = НоваяСтрока; Возврат Строка; КонецФункции В описание БП пользователь в конец сообщения вставил 6 000 000 пробелов Код = КодСимвола(Строка, Поз); 1000 раз выполняется за 3 секунды как можно "оптимизировать"? |
|||
1
Garykom
гуру
11.10.22
✎
16:02
|
XMLСтрока()
|
|||
2
Ryzeman
11.10.22
✎
16:04
|
>>В описание БП пользователь в конец сообщения вставил 6 000 000 пробелов
Бить пробовали? СокрЛП() |
|||
3
mikecool
11.10.22
✎
16:12
|
"вставил 6 000 000 пробелов " - уснул лицом на клаве?
|
|||
4
PLUT
11.10.22
✎
16:20
|
(0) добавь в расширение или в код сокрлп() перед записью объекта, чтобы больше такой херни не было
> В описание БП пользователь в конец сообщения вставил 6 000 000 пробелов |
|||
5
dmt
11.10.22
✎
17:44
|
(0) > В описание БП пользователь в конец сообщения вставил 6 000 000 пробелов
а зачем объяснил? |
|||
6
Fragster
гуру
11.10.22
✎
18:00
|
Вместо НоваяСтрока = НоваяСтрока + ХХХ; используй объект ЗаписьXML.ЗаписатьБезОбработки(ХХХ)
|
|||
7
lodger
11.10.22
✎
18:03
|
(5) мечтает стать тестировщиком, наверное.
|
|||
8
lodger
11.10.22
✎
18:04
|
(0) сожрать регулярками незначащие последовательности символов и заменить первым символом такой последовательности, а потом уже твой код.
|
|||
9
Krendel
11.10.22
✎
19:32
|
Интересно, а если пользователь на какает тебе на клаву, какой код тогда надо писать?
|
|||
10
ДедМорроз
11.10.22
✎
19:38
|
Я такие функции оптимизировал тем,что запоминал место первого обычного символа и добавлял потом перед спец-символом строку обычных,а не по каждому символу.
Прирост скорости достаточно большой,так как операция КодСимвола практически мгновенная,в отличие от сложения строк. Ну и если замен очень много,то суммировать в маленькую строку до 256 символов,а когда превысит,то в другую - крличество каскадов подбирается опытным путем,т.к.нужно минимальную строку под размер буфера,выделяемого под строку,если у нее минимальный размер. |
|||
11
Курцвейл
11.10.22
✎
19:40
|
Вместо сложения строк делаем массив символов и потом СтрСоеденить
Это быстрее всего |
|||
12
mistеr
11.10.22
✎
19:42
|
(9) Г-код, конечно же!
|
|||
13
RomaH
naïve
12.10.22
✎
08:56
|
(10) я наверное искал где зависло через замер производительности? - так 99% именно на КодСимвола(Строка, НомерСимвола)
|
|||
14
RomaH
naïve
12.10.22
✎
08:58
|
XMLСтрока сама умеет?
ИмяСимвола = СоответствиеСпецСимволов.Получить(Код); Функция ПолучитьСоответствиеСпецСимволов() Экспорт Результат = Новый Соответствие; Результат.Вставить(193, "Aacute"); Результат.Вставить(225, "aacute"); Результат.Вставить(226, "acirc"); Результат.Вставить(194, "Acirc"); |
|||
15
Alexor
12.10.22
✎
09:10
|
Если спецсоответствие не большое
То может стрзаменить быстоее будет |
|||
16
RomaH
naïve
12.10.22
✎
09:15
|
(15) блин, все время ВСЁ!!! уходит на КодСимвола - если от цикла не избавиться - смысла нет
|
|||
17
RomaH
naïve
12.10.22
✎
09:16
|
иэто еще повезло, что пробелы, что мешает в описание Войну и мир Л.Н. Толстова вставить ?
|
|||
18
Alexor
12.10.22
✎
09:16
|
(16) перебрать из соотвествия. Поткоду вытащить символ и замену
|
|||
19
RomaH
naïve
12.10.22
✎
09:18
|
(18) ДО есть рабочий? вставь в описание 100 000 смволов текста и разошли всем пользователям для ознаомления
|
|||
20
RomaH
naïve
12.10.22
✎
09:18
|
(18) надо попробовать
|
|||
21
Alexor
12.10.22
✎
09:20
|
Для каждого стр из соответсвиеспкцсимволов цикл
Символкода=символ(стр.индекс) Стрзаменить(строка, символкод, &+стр) Конеццикла. Пишу с телефона но смысл надеюсь понятен |
|||
22
RomaH
naïve
12.10.22
✎
09:23
|
(21) да понятен
возможно надо будет от длины строки тот или иной алгоритм применять 250 символов из соответствия менять, или КодСимвола получать |
|||
23
Zapal
12.10.22
✎
09:31
|
(16) я думаю основная задержка связана именно с поиском Поз в большой строке
и если задействовать последовательное чтение через потоки данных то всё наладится |
|||
24
ДедМорроз
12.10.22
✎
10:39
|
Возможно,что большая строка в памяти хранится чанками,из-за этого поиск позиции для получения кода идет долго.
Тогда можно строку в поток,а потом читать этот поток и писать в другой. Я,просто,с этой задачей сталкивался и в других языках,но нигде торможения на получении кода символа не встречал. |
|||
25
Tatitutu
12.10.22
✎
11:25
|
1. Восстановить из бэкапа
2. Зачем удалять ЛИШНЕЕ - пусть напишет НУЖНОЕ CTRL+A -> DEL и пусть пользователь проснётся и заново напишет описание |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |