|   |   | 
| 
 | Как "уронить" ДО или как оптимизировать такой код? | ☑ | ||
|---|---|---|---|---|
| 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 и пусть пользователь проснётся и заново напишет описание | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |