|   |   | 
| 
 | Преобразование текста модуля в одну строку | ☑ | ||
|---|---|---|---|---|
| 0
    
        Широкий 03.04.13✎ 15:16 | 
        Занимаюсь оптимизацией. 
  Нужна обработка по форматированию. | |||
| 1
    
        palpetrovich 03.04.13✎ 15:27 | 
        фигасе оптимизация... я-бы назвал это вредительством     | |||
| 2
    
        rs_trade 03.04.13✎ 15:28 | 
        (0) а в чем будет оптимизация если сделать это?     | |||
| 3
    
        SherifSP 03.04.13✎ 15:28 | 
        Ы бред)     | |||
| 4
    
        Kreont 03.04.13✎ 15:28 | 
        экономишь на символах 0A0D? :)     | |||
| 5
    
        Широкий 03.04.13✎ 15:29 | 
        (2) В скорости выполнения обработки, особенно если обработка содержит много циклов     | |||
| 6
    
        Reset 03.04.13✎ 15:29 | 
        Для каких-то длинных циклов с вычислениями где-то(редко) может и оправдано... но весь модуль...     | |||
| 7
    
        GROOVY 03.04.13✎ 15:29 | 
        ТС видимо шутку с циклом в одну строку увидел и решил что это все реально :)     | |||
| 8
    
        SherifSP 03.04.13✎ 15:29 | 
        (4) Хочет сделать код не читабельный, ну так пусть просто криптует модуля)     | |||
| 9
    
        Reset 03.04.13✎ 15:30 | 
        +1 к (1)     | |||
| 10
    
        НафНаф 03.04.13✎ 15:30 | 
        (5) сделай меньше циклов     | |||
| 11
    
        Широкий 03.04.13✎ 15:30 | 
        (7) Это не шутка..Такова особенность 1с     | |||
| 12
    
        GROOVY 03.04.13✎ 15:31 | 
        (занудным голосом) система 1С:Предприятие является интерпретатором с ___предварительной компиляцией___.
  Ей пофиг в одну строку или в 10 располагается оператор. | |||
| 13
    
        rs_trade 03.04.13✎ 15:31 | 
        (11) пруфы будут?     | |||
| 14
    
        John83 03.04.13✎ 15:32 | 
        (7) вовсе не шутка - сам как-то тестил, прирост и правда внушительный...     | |||
| 15
    
        GROOVY 03.04.13✎ 15:32 | 
        (11) Феерично! 
  Посмотри как выглядит скомпилированный код для интерпретатора. | |||
| 16
    
        Reset 03.04.13✎ 15:32 | 
        (13) пруфоф море     | |||
| 17
    
        Reset 03.04.13✎ 15:32 | 
        (12) Забавно     | |||
| 18
    
        rs_trade 03.04.13✎ 15:32 | 
        (12) ну теоретически, текст модуля будет компилиться на 0.000001 секунды быстрее же?     | |||
| 19
    
        HeroShima 03.04.13✎ 15:32 | 
        а в каждом цикле по запросу     | |||
| 20
    
        GROOVY 03.04.13✎ 15:32 | 
        (14) В ОТЛАДКЕ, да. Так как там обработка интерпретатора в строкам привязывается.
  Вы чего???!!! | |||
| 21
    
        Reset 03.04.13✎ 15:33 | 
        (18) выполняться быстрее     | |||
| 22
    
        rs_trade 03.04.13✎ 15:33 | 
        (16) в студию     | |||
| 23
    
        rs_trade 03.04.13✎ 15:33 | 
        (20) не все до конца дочитали     | |||
| 24
    
        Kreont 03.04.13✎ 15:33 | 
        пробелы, табуляции, ентеры это только для рисование на экране, и на скорость обработки никак не влияет :)     | |||
| 25
    
        palpetrovich 03.04.13✎ 15:34 | 
        а по сути, неопнятно в чем вопрос, если действительно надо, сохраняй ТекстМодуля в текстовй файл - ну и  СтрЗаменить(ТекстМодуля, Символы.LF, "") - в помощь
  главное не забыть обратную операцию предусмотреть, для разбота так сказать ;) | |||
| 26
    
        Широкий 03.04.13✎ 15:34 | 
        (20) Блин.. возьми да проверь на пустом цикле.     | |||
| 27
    
        Reset 03.04.13✎ 15:34 | 
        (22) ну сам замерь
  для й=1 по 10000000 цикл а=1; КонецЦикла; и для й=1 по 10000000 цикл а=1; КонецЦикла; ну бородатый баян жеж вы чего | |||
| 28
    
        Kreont 03.04.13✎ 15:35 | 
        (27) пошел проверять, ну очень интересно...     | |||
| 29
    
        rs_trade 03.04.13✎ 15:35 | 
        (26) да это баянище рваное. делать больше нечего как ерундой заниматься.     | |||
| 30
    
        GROOVY 03.04.13✎ 15:35 | 
        Ага, только замеряйте не в отладке, и привязыватейсь к времени процессора.     | |||
| 31
    
        palpetrovich 03.04.13✎ 15:36 | 
        (28) проверяй только не в отладчике, а то прирост дейтсвительно будет :)     | |||
| 32
    
        orefkov 03.04.13✎ 15:36 | 
        (12)
  Так-то оно так, да только у 1С интерпретатор так сделан, что при начале обработки кода другой строки идут действия, связанные с отладкой и замером. Точно сейчас не скажу, но вроде бы там в байт-код даже вставляется опкод "Новая строка" и номер строки. Т.е каждый раз при переходе на новую строку кода интерпретатор проверяет - "не включен ли отладчик, не идет ли замер?" Некоторые оптимизаторы/обфускаторы не переписывают исходный код, а напрямую из скоипилированного байткода удаляют этот опкод. | |||
| 33
    
        rs_trade 03.04.13✎ 15:36 | 
        (27) только развязку видимо не все знают     | |||
| 34
    
        GROOVY 03.04.13✎ 15:36 | 
        А я то думал люди с такими полосками под ником такой хней не страдают, ан нет...     | |||
| 35
    
        GROOVY 03.04.13✎ 15:37 | 
        (32) Ага, см (20)     | |||
| 36
    
        Широкий 03.04.13✎ 15:37 | 
        (30) Как по твоему 1с выдает номер строки при непредвидимой ошибке?     | |||
| 37
    
        Reset 03.04.13✎ 15:38 | 
        (35) (30) (31) Забавно.     | |||
| 38
    
        Reset 03.04.13✎ 15:38 | 
        вон даже Орефков пояснение дал     | |||
| 39
    
        fmrlex 03.04.13✎ 15:39 | 
        Оптимизация Попова(R)?     | |||
| 40
    
        BiBijke 03.04.13✎ 15:40 | 
        проверил на цикле от 1 до 100 000. Одинаковое время выдал, прироста никакого :)     | |||
| 41
    
        Kreont 03.04.13✎ 15:40 | 
        Проверил (28) я в шоке, реально быстрее.
  Мозг взорвался :) 8 и 11 секунд, 3 раза мерял. | |||
| 42
    
        Kreont 03.04.13✎ 15:41 | 
        (40) на таком я тоже проверял, не заметно, добавь нулей :)     | |||
| 43
    
        rs_trade 03.04.13✎ 15:42 | 
        Автор, у тебя управляемые блокировки используются в конфе?     | |||
| 44
    
        Широкий 03.04.13✎ 15:42 | 
        (43) да     | |||
| 45
    
        BiBijke 03.04.13✎ 15:42 | 
        (42) У меня 11 секунд оба выполнялись с выводом состояния на каждом шаге, если прирост и есть то там микросекунды, которые никому не нужны     | |||
| 46
    
        НафНаф 03.04.13✎ 15:44 | 
        Сообщить(ТекущаяДата());
  для й=1 по 100000000 цикл а=1; КонецЦикла; //с отладкой 38, без 37 Сообщить(ТекущаяДата()); Сообщить(ТекущаяДата()); для й=1 по 100000000 цикл //с отладкой 74, без 50 а=1; КонецЦикла; Сообщить(ТекущаяДата()); | |||
| 47
    
        Кирпич 03.04.13✎ 15:45 | 
        При запуске из конфигуратора всегда медленнее. Ибо там стопудово стоит счетчик строк и проверка на отладку. А вот без конфигуратора, то ХЗ.     | |||
| 48
    
        palpetrovich 03.04.13✎ 15:46 | 
        (46) та лано?     | |||
| 49
    
        НафНаф 03.04.13✎ 15:46 | 
        (48) ты не веришь Ненавижу 1С ?     | |||
| 50
    
        Kreont 03.04.13✎ 15:46 | 
        Так я пошел модули в УТП перепишу, а то я думаю че ж она так тормозит, а решение вон оно: в топике темы )     | |||
| 51
    
        ptiz 03.04.13✎ 15:48 | 
        Ух ты! Разница в 2 раза! (с отладкой - в 4 раза)
  НачДата = ТекущаяДата(); Сообщить("Нач.дата: " + НачДата); А = 0; Для сч = 1 По 500000 Цикл А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; КонецЦикла; Сообщить("Затрачено: " + (ТекущаяДата() - НачДата) + " сек."); НачДата = ТекущаяДата(); Сообщить("Нач.дата: " + НачДата); А = 0; Для сч = 1 По 500000 Цикл А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; А = А + 1; КонецЦикла; Сообщить("Затрачено: " + (ТекущаяДата() - НачДата) + " сек."); | |||
| 52
    
        rs_trade 03.04.13✎ 15:52 | 
        мерял как то давно, когда в моде эта тема была. там разница не принципиальная получалась.     | |||
| 53
    
        GROOVY 03.04.13✎ 15:53 | 
        (0) Решение вопроса (игнорируя все сообщения в ветке):
  Копируешь модуль в ворд. Потом "Поиск и замена", там указываешь заменить перенос строки пробелом. Табуляцию пробелом. Два пробела на один пробел. Копируешь обратно. Отпишись как прошло. | |||
| 54
    
        sikuda 03.04.13✎ 15:54 | 
        (51) Без отладки. 1С:Предприятие 8.2 (8.2.18.61)
  Нач.дата: 03.04.2013 15:52:06 Затрачено: 2 сек. Нач.дата: 03.04.2013 15:52:08 Затрачено: 2 сек. (0)Ждем появления модулей ОбщегоНазначенияКлиент_минимум, ПроцедурыОбменаДаннымиКлиент_минимум. Для оптимизация их загрузки на клиенте, ах жаль и там у всех gzip | |||
| 55
    
        НЕА123 03.04.13✎ 15:55 | 
        (51)
  в параметрах отладка разрешена включена осталась | |||
| 56
    
        Широкий 03.04.13✎ 15:56 | 
        (53) А еще символ "|" в строках.. и т.д.
  Я поэтому и спрашивал обработку, чтобы вот так руками не писать | |||
| 57
    
        John83 03.04.13✎ 16:01 | 
        8.2.15.301
  Для стр = 1 По 99999999Цикл Если стр % 10000 = 0 Тогда Состояние(стр); КонецЕсли; ОбработкаПрерыванияПользователя(); а = 1; КонецЦикла; 77 сек Для стр = 1 По 99999999 Цикл Если стр % 10000 = 0 Тогда Состояние(стр); КонецЕсли; ОбработкаПрерыванияПользователя(); а = 1; КонецЦикла; 96 сек в параметрах отладка не включена, конфигуратор вообще не запущен PS предлагаю забанить ТС, за внесение разлада в рабочий день :) | |||
| 58
    
        John83 03.04.13✎ 16:02 | 
        +57
  Для стр = 1 По 99999999 Цикл Если стр % 10000 = 0 Тогда Состояние(стр); КонецЕсли; ОбработкаПрерыванияПользователя(); а = 1; КонецЦикла; | |||
| 59
    
        palpetrovich 03.04.13✎ 16:03 | 
        (56) кста, иногда в модулях можно встретить  нечто типа:
  А = 0; // присвоение переменной А значения 0 тоже не забудь учесть ;) | |||
| 60
    
        NcSteel 03.04.13✎ 16:05 | 
        (51) Мои данные. на 5000000 цикле.
  Нач.дата: 03.04.2013 16:02:44 Затрачено: 30 сек. Нач.дата: 03.04.2013 16:03:14 Затрачено: 26 сек. | |||
| 61
    
        Flyd-s 03.04.13✎ 16:07 | 
        (51), твой код при цикле 1.5млн выдает 7 против 6 секунд без отладки     | |||
| 62
    
        ptiz 03.04.13✎ 16:07 | 
        (55) Черт! Не знал, что даже при отсутствии подключения отладка тормозит :(     | |||
| 63
    
        NcSteel 03.04.13✎ 16:08 | 
        (60) Замер номер два с разными обработками:
  Нач.дата: 03.04.2013 16:05:49 Затрачено: 30 сек. Нач.дата: 03.04.2013 16:06:55 Затрачено: 28 сек. Как видно разница минимально, но есть. | |||
| 64
    
        ptiz 03.04.13✎ 16:08 | 
        Короче, туфта.     | |||
| 65
    
        NcSteel 03.04.13✎ 16:09 | 
        (63) + Но это 5 млн строк обхода, что ооооооооочень редко, даже бы сказал невозможно. 
  Так что овчинка выделки не стоит, так как проблемы с поддержкой возникают. | |||
| 66
    
        Широкий 03.04.13✎ 16:10 | 
        Мои данные: 
  Пересчет регистров себестоимости за месяц. 3000 доков/в день ~ по 20 строк в каждом. Фирма работает круглосуточно. Даже 5% на этой мелочи и то неплохо | |||
| 67
    
        NcSteel 03.04.13✎ 16:11 | 
        (66) там нету 5% , меньше же. При этом при уменьшении количество обхода процент уменьшается. В твоем случае будет 0,01%     | |||
| 68
    
        rs_trade 03.04.13✎ 16:11 | 
        (66) лучше бы подумал как распараллелить     | |||
| 69
    
        Широкий 03.04.13✎ 16:12 | 
        (66) Вы как бы идеальный замер делаете  - 5 строк в цикле     | |||
| 70
    
        NcSteel 03.04.13✎ 16:12 | 
        И что за мифический "Пересчет регистров себестоимости", может стоит оптимизировать?     | |||
| 71
    
        rs_trade 03.04.13✎ 16:13 | 
        Оптимизация это прежде всего блокировки и запросы. А эти циклы это ни о чем.     | |||
| 72
    
        GROOVY 03.04.13✎ 16:14 | 
        При записи данных в цикле, оптимизировать компилятор?! 
  Это даст прирост в производительности, в лучшем случае, 1 минуту в 10 лет. Пр этом когда вылезет ошибка в строке №1 ты потратишь несколько часов чтобы ее найти. | |||
| 73
    
        Широкий 03.04.13✎ 16:14 | 
        (70) Блокировки это не оптимизация а масштабируемость     | |||
| 74
    
        NcSteel 03.04.13✎ 16:15 | 
        (69) 100 строк в цикле и итерация 3000, разными обработками
  Нач.дата: 03.04.2013 16:13:21 Затрачено: 1 сек. Нач.дата: 03.04.2013 16:15:02 Затрачено: 1 сек. ты выигрываешь меньше секунды.... | |||
| 75
    
        Кирпич 03.04.13✎ 16:17 | 
        Могли бы разработчики конечно и что нибудь поумнее с отладкой придумать, но вроде не сильно времени жрет. Хотя если глобально посчитать сколько энергии потратит 1C за год на всех компьютерах страны выполняя команду MOVE [CurrentLine],1, то наверное надо что-то делать.     | |||
| 76
    
        rs_trade 03.04.13✎ 16:18 | 
        (73) сужаем блокировки, получаем возможность параллельного выполнения. как то так в общем.     | |||
| 77
    
        NcSteel 03.04.13✎ 16:18 | 
        (75) Тесты говорят, что фактически не жрет, тоесть процент ооооочень минимальный. 
  А "умники" такие как в (0) каждый год сжигают столько кислорода, что легче их пристрелить, хоть польза будет. | |||
| 78
    
        orefkov 03.04.13✎ 17:12 | 
        Вот все решение (0)
  text = text.replace(/\n\s*\|/g, '" "').replace(/\n/g, ' ') | |||
| 79
    
        orefkov 03.04.13✎ 17:13 | 
        (78)
  От я блин облажался. Комменты не учел. | |||
| 80
    
        ssh2006 03.04.13✎ 17:54 | 
        (0) Запросы тоже в одну строку переписывать планируешь?     | |||
| 81
    
        TormozIT гуру 03.04.13✎ 18:36 | 
        Создал тему на партнерском форуме "Ускорение выполнения кода за счет расположения всех инструкций в одну строку" http://partners.v8.1c.ru/forum/thread.jsp?id=1134075#1134075
  Попросил объяснить, чем это обусловлено. | |||
| 82
    
        Кирпич 03.04.13✎ 19:05 | 
        (81) да и так понятно чем обусловлено. можно и не спрашивать.     | |||
| 83
    
        TormozIT гуру 03.04.13✎ 19:07 | 
        (82) Поделишься? Очень интересно прочитать компетентное объяснение. 
  Кстати я задал не только вопрос "почему", но и "можно ли оптимизировать в платформе". | |||
| 84
    
        Escander 03.04.13✎ 19:21 | 
        (0) так вот откуда происходит твой ник!     | |||
| 85
    
        TormozIT гуру 03.04.13✎ 19:22 | 
        Провел тест на платформе 8.2.18.61 в обычном приложении с отключенным отладчиком следующим кодом с параметром Количество = 1000000
  НачатьЗамер(Количество); Для стр = 1 По Количество Цикл Если стр % 10000 = 0 Тогда КонецЕсли; в = 342; п = в; а = 1; КонецЦикла; ЗакончитьЗамер(); НачатьЗамер(Количество); Для стр = 1 По Количество Цикл Если стр % 10000 = 0 Тогда КонецЕсли; в = 342; п = в; а = 1; КонецЦикла; ЗакончитьЗамер(); Получил Окончание замера "Замер_1" - Длительность = 0.911 с, Среднее = 0.000000911 с Окончание замера "Замер_2" - Длительность = 1.257 с, Среднее = 0.000001257 с | |||
| 86
    
        Кирпич 03.04.13✎ 19:23 | 
        (83) в (32) вполне внятное объяснение     | |||
| 87
    
        Escander 03.04.13✎ 19:24 | 
        (85) продолжайте исследования дальше, не факт что во время второго теста долбаные окна не решились записать своп на винт...
  ради объективности следует провести серию из испытаний а не 1,2,3 | |||
| 88
    
        TormozIT гуру 03.04.13✎ 19:25 | 
        (86) Я очень рад, что тебе все понятно, но думаю большинству это не интересно.     | |||
| 89
    
        TormozIT гуру 03.04.13✎ 19:27 | 
        (86) В (32) пока не подтвержденная информация. Если orefkov потрудится проверить все и рассказать нам, будет очень полезно.     | |||
| 90
    
        Кирпич 03.04.13✎ 19:34 | 
        (89) Ты же сам только что проверял. Чем больше строк, тем больше время. Выяснять нечего. Всё логично и понятно. Можно конечно попросить разработчиков добавить в язык что нибудь типа #ОтключитьУказательТекущейСтроки. Но так как убытки от этого мизерные, то и заморачиваться никто не будет. Да и не надо.     | |||
| 91
    
        TormozIT гуру 03.04.13✎ 19:39 | 
        (90) Разница может быть существенной. Она связана с отношением числа строк к среднему времени выполнения опкодов строки.
  Вот например замер, где разница уже в 2 раза УФ(сНачатьЗамер, Количество); Для стр = 1 По Количество Цикл в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; КонецЦикла; УФ(сЗакончитьЗамер); УФ(сНачатьЗамер, Количество); Для стр = 1 По Количество Цикл в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; в = 342; КонецЦикла; УФ(сЗакончитьЗамер); Окончание замера "Замер_10" - Длительность = 1.029 с, Среднее = 0.000001029 с Окончание замера "Замер_11" - Длительность = 1.948 с, Среднее = 0.000001948 с | |||
| 92
    
        TormozIT гуру 03.04.13✎ 19:46 | 
        (91) Точнее разница будет определяться отношением среднего времени выполнения одной строки к фиксированному времени выполнения служебных операций интерпретатором при переходе к новой строке. Таким образом, чем дольше в среднем выполняется строка кода, тем менее заметна будет разница.     | |||
| 93
    
        Кирпич 03.04.13✎ 19:52 | 
        (91) чота ты загнул. пошли кони в вакууме.     | |||
| 94
    
        Кирпич 03.04.13✎ 19:53 | 
        (92) кстати, у тебя в тесте разное количество "в = 342"     | |||
| 95
    
        TormozIT гуру 03.04.13✎ 19:53 | 
        (93) Согласен. В (92) исправился.     | |||
| 96
    
        GROOVY 03.04.13✎ 19:57 | 
        Если не писать в модулях большими буквами, то компилятору будет еще проще и скорость возрастет.     | |||
| 97
    
        GROOVY 03.04.13✎ 19:58 | 
        Подписался на тему на партнерском....     | |||
| 98
    
        IamAlexy 03.04.13✎ 19:59 | 
        гы     | |||
| 99
    
        Ursus maritimus 03.04.13✎ 20:00 | 
        Какой только херней люди не занимаются чтобы не работать.     | |||
| 100
    
        Кирпич 03.04.13✎ 20:00 | 
        а еще есть секретные слова, которые можно вставлять в код, чтобы он ускорился на какое то время. но только он после такого ускорения потом какое то время очень медленно работает. видимо чтобы интерпретатор отдохнул.     | |||
| 101
    
        IamAlexy 03.04.13✎ 20:01 | 
        (0) автор, ты х.ней маешся а не оптимизацией занимаешся..
  нашел что оптимизировать.. у тебя на серваке базы не реиндексировались уже четыре месяца, на 26ядерной железке крутится один единственный рпхост который обслуживает 100 онлайн подключений, ключ сетевой аппаратный подключен через гпрс канал к сетке, в базе лежат сохраненные файлы размером до 50 мб, и все это на пятом райде крутится у которого из пяти дисков два уже давно сдохли.. вот чем надо заниматься.. а не в строку загонять код модулей.. | |||
| 102
    
        Кирпич 03.04.13✎ 20:02 | 
        (101) да автора уже давно нету. остались только тролли.     | |||
| 103
    
        TormozIT гуру 03.04.13✎ 20:03 | 
        (94) Да, действительно. Правда исправленный код дает еще бОльшую относительную разницу, т.к. лишняя операция содержалась в однострочном фрагменте.     | |||
| 104
    
        Кирпич 03.04.13✎ 20:05 | 
        (103) Ну чо будем делать? Предъявим 1С иск за зря потраченное электричество?     | |||
| 105
    
        TormozIT гуру 03.04.13✎ 20:07 | 
        (104) Я рассматриваю проблему серьезно. Думаю есть шанс убедить производителя в оптимизации этих служебных действий интерпретатора при переходе к новой строке в опкоде.
  Возможно orefkov посмотрит внутренности и скажет, есть ли там что ускорять. | |||
| 106
    
        Кирпич 03.04.13✎ 20:13 | 
        (105)ну если у тебя есть шанс, то убеждай. а я миллиардные циклы в 1с не кручу. как то не случалось ещё. а если случиться, то я это буду делать не в 1с. ибо 1с все равно медленнее любого компилятора в сотни раз.     | |||
| 107
    
        TormozIT гуру 03.04.13✎ 20:18 | 
        (106) Ну если никто не попытается, то шансы будут значительно ниже)     | |||
| 108
    
        Escander 04.04.13✎ 03:21 | 
        (101) может он и мается, но в процессе обсуждения я кое что новое узнал - так что тема полезная     | |||
| 109
    
        Balabass 04.04.13✎ 05:08 | 
        а=0;
  Сообщить(ТекущееВремя()); Пока а<100000000 Цикл а=а+1; КонецЦикла; Сообщить(ТекущееВремя()); а=0;Сообщить(ТекущееВремя());Пока а<100000000 Цикл а=а+1;КонецЦикла;Сообщить(ТекущееВремя()); а=0;message(текущеевремя());while а<100000000 do а=а+1;enddo;message(текущеевремя()); 1. 63 2. 59 3. 58 Так то ))) | |||
| 110
    
        Escander 04.04.13✎ 05:17 | 
        (109) что ещё раз доказывает, что 1С оптимизируют в сторону англоговорящих.     | |||
| 111
    
        Escander 04.04.13✎ 05:56 | 
        (109) не поверишь:
  а=0; ее=текущаядата(); Пока а<100000000 Цикл а=а+1; КонецЦикла; Сообщить(текущаядата()-ее); а=0;ее=текущаядата();Пока а<100000000 Цикл а=а+1;КонецЦикла;Сообщить(текущаядата()-ее); а=0;ее=текущаядата();while а<100000000 do а=а+1;enddo;message(текущаядата()-ее); результат: 396, 44, 45 | |||
| 112
    
        Balabass 04.04.13✎ 07:18 | 
        хех...     | |||
| 113
    
        Balabass 04.04.13✎ 07:18 | 
        да как бы 2 и 3 вариант не показательны.
  а вот 1 и 2/3 - да | |||
| 114
    
        Широкий 04.04.13✎ 12:27 | 
        С чего я захотел так сделать:
  http://infostart.ru/public/19753/ Старую версию когда переделал в одну строку - скорость чтения увеличилась на 20-30% | |||
| 115
    
        Кирпич 04.04.13✎ 12:31 | 
        Прелестно     | |||
| 116
    
        Гризли 04.04.13✎ 12:31 | 
        (101) А ты неплохо информирован, как я погляжу. Или это все из головы придумано?     | |||
| 117
    
        Кирпич 04.04.13✎ 12:33 | 
        (114) Ну чего там партнерский форум говорит на счет наших чудо-тормозов?     | |||
| 118
    
        fisher 04.04.13✎ 12:54 | 
        (32) В принципе, это логично. Ведь отладчик и замер могут быть подключены в любой момент.     | |||
| 119
    
        PCcomCat 04.04.13✎ 13:08 | 
        (Упала с табуретки) 
  Люди добрые! А подскажите, как производите замер без отладчика? | |||
| 120
    
        PCcomCat 04.04.13✎ 13:14 | 
        (120) Всё, не надо. Это от растерянности не сообразила.     | |||
| 121
    
        TormozIT гуру 04.04.13✎ 13:31 | 
        (117) Пока там нет комментариев от производителя. Но есть несколько оппонентов, забрасывающих меня аргументами типа "по сравнению с обращением к БД это все мелочи".     | |||
| 122
    
        fisher 04.04.13✎ 13:35 | 
        (121) И они таки правы.
  Развели бурю в стакане воды. Очевидно, что интерпретатору необходим маркер строки. Очевидно, что на его отработку требуется дополнительное время. Можно считать перевод строки дополнительным оператором. | |||
| 123
    
        TormozIT гуру 04.04.13✎ 13:43 | 
        (122) Это твое мнение.
  Я же стараюсь опираться на факты Примеры задач, решение которых будет чувствительно к такой оптимизации (естественно подразумевается без большого количества обращений к серверу БД): запросом выбираем большой объем данных из БД и выполняем его алгоритмическую обработку, которую в запросе делать невозможно или очень сложно рекурсивный поиск по дереву значений сложный анализ (разбор) текстов алгоритмы с высоким процентом математических операций (распределения сумм, хеш-функции и др.) | |||
| 124
    
        TormozIT гуру 04.04.13✎ 13:44 | 
        В моей практике было много задач, где вычисления длительное время выполнялись без обращения к БД.     | |||
| 125
    
        TormozIT гуру 04.04.13✎ 13:53 | 
        Мои замеры наводят на мысль о том, что выполнение кода
  "переменная1 = 343;" длится столько же, сколько и обработка опкода "новая строка". Кажется, что это довольно расточительно. По логике опкод "новая строка" всего лишь должен внутренний счетчик строки модуля увеличить и проверить флаг "отладчик подключен". Может быть я забыл о чем то еще? | |||
| 126
    
        cw014 04.04.13✎ 13:55 | 
        Обработка в одну строку:
  Результат = СтрЗаменить(ИсходныйТекст, Символы.ПС, " "); | |||
| 127
    
        TormozIT гуру 04.04.13✎ 13:57 | 
        (126) Сломаешь многострочные строковые литералы (тексты запросов например).     | |||
| 128
    
        NWsFF 04.04.13✎ 14:00 | 
        Спасибо, узнал что-то новое сегодня.     | |||
| 129
    
        fisher 04.04.13✎ 14:03 | 
        (123) Чувствительны будут только большие итерации без обращений к БД. Кусочно такие можно надергать из контекста. Реально же рядом все равно будут обращения к БД и в итоге процентно фиг что выиграешь. При этом теряется возможность удобной отладки и замера.
  Ну а кто занимается мегапарсингами и решением диф-уравнений численными методами средствами 1С - сам себе злобный буратино. А то давай еще припомним особенности производительности арифметики 1С и какие чудеса оптимизации там возможны. | |||
| 130
    
        TormozIT гуру 04.04.13✎ 14:05 | 
        Хочу сделать акцент на том, что мне хотелось бы убрать соблазн у разработчиков прикладных решений писать большие фрагменты кода в одну строку. Т.е. сам прирост производительности конечно тоже был бы полезен, но вторичен.
  Например, если программист будет писать разбор какого то текста средствами 1С, то там выигрыш от такого приема наверняка будет заметным. Поэтому если его попросят ускорить работу программы, то вполне вероятно что он решит применить такую оптимизацию. Однако потом дорабатывать ее будет очень неудобно. | |||
| 131
    
        Escander 04.04.13✎ 14:16 | 
        (114) что там такое? Мне говорит что права у меня слабые что-бы читать...     | |||
| 132
    
        Рэйв 04.04.13✎ 14:25 | 
        (0)Потом твой приемник на рабочем месте(когда уволишься) подстережет тебя в темной подворотне и прострелит коленку.
  И будет прав. | |||
| 133
    
        Гризли 04.04.13✎ 14:25 | 
        (132) Представил прячущийся в подборотне приемник, сломал себе мозг.     | |||
| 134
    
        Рэйв 04.04.13✎ 14:27 | 
        (133)
  Человек, замениший ТС на месте работы. Так не очень ломает ?:-) | |||
| 135
    
        be-may 04.04.13✎ 14:34 | 
        (134) мне кажется, таких не увольняют. Такие люди становятся незаменимыми, ибо, после них никто не захочет работать.
  по теме. Причитала. ИМХО, "экономия на спичках". неужели кроме этого уже все оптимизировано ? | |||
| 136
    
        be-may 04.04.13✎ 14:35 | 
        (135) Причитала -> ПрОчитала     | |||
| 137
    
        Гризли 04.04.13✎ 14:54 | 
        (134) Тогда пишется "преЕмник"     | |||
| 138
    
        TormozIT гуру 04.04.13✎ 15:30 | 
        Производитель на партнерском форуме написал
  "При компиляции 1С модулей, компилятор вставляет специальную команду перед первой выполняющейся инструкцией в строке исходного кода. Эта команда используется для служебных целей платформы, например обработки прерывания выполнения кода, работы отладчика и т.п. Обычно, обработка этой команды очень слабо влияет на производительность 1С кода." | |||
| 139
    
        samozvanec 04.04.13✎ 15:33 | 
        (20) че там у тебя привязывается? ты когда ф10 жмешь, у тебя вся строка выполняется?)     | |||
| 140
    
        fisher 04.04.13✎ 16:07 | 
        (138) Так и есть. Мои замеры тоже показали, что маркер строки отрабатывается по времени примерно как простое присваивание переменной. Быстрее особо некуда.
  Но фишка прикольная своей неочевидностью. | |||
| 141
    
        awa15 04.04.13✎ 16:12 | 
        (138) Странно, но ты никогда не читал http://infostart.ru/public/71130/ ?     | |||
| 142
    
        TormozIT гуру 04.04.13✎ 16:14 | 
        Производитель также сообщил, что 
  - при обработке опкода новой строки "на клиенте предотвращается "замерзание" интерфейса, а на сервере отслеживается потеря связи с клиентом и убитие соединения администратором" - "Код "переменная1 = 342" практически ничего не делает, т.к. 342 это константа, сконструированная при компиляции модуля, а присваивание ее переменной очень дешевая операция." Других пояснений по "служебным операциям" больше видимо не дадут. | |||
| 143
    
        fisher 04.04.13✎ 16:20 | 
        На моем рабочем компе, чтобы время отработки 30-ти маркеров строки в цикле приблизилось к одной секунде, необходимо более полумиллиона итераций.     | |||
| 144
    
        TormozIT гуру 04.04.13✎ 16:34 | 
        (141) Сейчас перечитал твои комменты там. Действительно, много полезной информации можно было бы получить сразу. Но теперь уже главная цель - предотвратить использование этого приема. Если не оптимизацией интерпретатора, то директивой компиляции.     | |||
| 145
    
        awa15 04.04.13✎ 16:41 | 
        (144) А не нужно директиву компиляции, по сути. Как мне это видится: надо сделать 2 режима запуска предприятия  - с возможностью отладки и без. В режиме без отладки компилировать без лишних кодов {1, x}. Подключаться конфигуратором можно только к сессиям, запущенным в режиме отладки.     | |||
| 146
    
        Fish гуру 04.04.13✎ 16:45 | 
        (0) А я всегда думал, что оптимизация программы заключается прежде всего в оптимизации алгоритмов. А оказывается всё просто - переписал любой быдлокод в одну строку, и он сразу стал оптимальным :)     | |||
| 147
    
        TormozIT гуру 04.04.13✎ 16:45 | 
        (145) Тогда ошибки в работающих сеансах будет сложнее диагностировать. Директива компиляции применялась бы ровно в тех местах, где прирост будет перевешивать неудобства отладки фрагмента.     | |||
| 148
    
        notton 04.04.13✎ 16:57 | 
        не делали замер когда в цикле вызываются функции, компиляция кода функции будет делаться при каждой итерации цикла?     | |||
| 149
    
        notton 04.04.13✎ 16:58 | 
        про этот прикол с текстом в одну строку давно знал, но интересует именно эта особенность     | |||
| 150
    
        TormozIT гуру 04.04.13✎ 17:03 | 
        (145) Я так понимаю серверный код так и компилируется (ключ -debug включает удаление этих опкодов).     | |||
| 151
    
        Reset 04.04.13✎ 17:04 | 
        (148) Функция будет компилироваться только первый раз, при обращении к модулю, в котором она находится     | |||
| 152
    
        awa15 04.04.13✎ 17:18 | 
        (150) Подозреваю, что нет. Скорее всего этот ключ влияет только на прослушивание портов.     | |||
| 153
    
        Reset 04.04.13✎ 17:22 | 
        (150) Мне кажется, этот ключ только включает возможность общаться серверу и клиенту, а компиляция происходит одинаково     | |||
| 154
    
        Reset 04.04.13✎ 17:22 | 
        *серверу и отладчику     | |||
| 155
    
        Reset 04.04.13✎ 17:23 | 
        Что-то вроде, но не аналогично "Отладка в текущем сеансе разрешена" в Предприятии     | |||
| 156
    
        orefkov 04.04.13✎ 17:24 | 
        (126)
  И помимо многострочных строк - весь текст модуля после первого комментария станет комментарием. | |||
| 157
    
        Ахиллес 04.04.13✎ 17:24 | 
        (146) Ну если быдлоплатформа позволяет такую оптимизацию, то почему бы ей не воспользоваться? Если цикл написанный в 1 строку работает быстрее цикла написанного в три строки то это самая, что ни на есть быдлоплатформа.     | |||
| 158
    
        BigShmax 04.04.13✎ 17:25 | 
        у меня на рабочем сервере при убирании debug  происходит очень нехилый прирост.     | |||
| 159
    
        Reset 04.04.13✎ 17:27 | 
        Кстати, по сабжу - если не ошибаюсь, поставка модулей без исходных текстов удаляет эти доп команды     | |||
| 160
    
        orefkov 04.04.13✎ 17:29 | 
        (145)
  Не получится. Из-за вот этого "- при обработке опкода новой строки "на клиенте предотвращается "замерзание" интерфейса, а на сервере отслеживается потеря связи с клиентом и убитие соединения администратором". Если убирать этот опкод, надо эти действия переносить куда-то в другое место. И этот перенос может потребовать серьезной переделки движка. | |||
| 161
    
        Джинн 04.04.13✎ 17:40 | 
        (157) Быдлоплатформа.. И? Не обсуждаете ли Вы сейчас фому дворников, которые нарушают аэродинамику Феррари и приводят в повышению расхода топлива на 3 грамма на сотню километров?     | |||
| 162
    
        Reset 04.04.13✎ 17:43 | 
        +(156) Еще инструкции препроцессору должны быть каждая на отдельной строке :)     | |||
| 163
    
        awa15 04.04.13✎ 17:53 | 
        (159) Ошибаешься. Не удаляет.     | |||
| 164
    
        Ахиллес 04.04.13✎ 18:06 | 
        (161) Сам, я в такую оптимизацию не очень то верю и у себя такой хернёй заниматься не буду, но если у человека весь код вылизан и все остальные пути оптимизации исчерпаны, то почему бы и нет? :-)     | |||
| 165
    
        Reset 04.04.13✎ 18:22 | 
        (163) Да, похоже, что-то перепутал. Прошу прощения.     | |||
| 166
    
        TormozIT гуру 04.04.13✎ 19:05 | 
        Также производитель сообщил, что "на клиенте предотвращается "замерзание" интерфейса, а на сервере отслеживается потеря связи с клиентом и убитие соединения администратором" не только при обработке этого опкода выполняется: "Платформа внутри своих механизмов, но не во всех, периодически делает эти служебные операции".     | |||
| 167
    
        TormozIT гуру 04.04.13✎ 19:06 | 
        Т.е. удаление этих опкодов не совсем отключает "замерзание", но повышает вероятность этого, насколько сильно не уточняется, но думаю сильно.     | |||
| 168
    
        TormozIT гуру 04.04.13✎ 19:07 | 
        (167) Ошибся.
  Т.е. удаление этих опкодов не приведет к полному "замерзанию", но повышает его вероятность, насколько сильно не уточняется, но думаю сильно. | |||
| 169
    
        IamAlexy 04.04.13✎ 19:13 | 
        я в детстве так свой код защищал..
  модуль на 10500 строк просто клал в одну строку с помощью обработки специальной через выгрузку/загрузку модуля в результате платформа вставала раком если попытаться распарсить эту строку на 8.1 было.. | |||
| 170
    
        shpioleg 04.04.13✎ 19:20 | 
        При написании генератора ходов в шахматах тоже пытался попробовать "прибавить скорости", свернув циклы в одну строку, и избавиться от вызова процедур. Но запуская из режима Предприятия, никакого прироста скорости выполнения не обнаружил. При отладке, конечно, выигрыш существенный.     | |||
| 171
    
        awa15 04.04.13✎ 19:38 | 
        (168) Действительно. Проверил только что на своем декомпиляторе. В процессе работы он выдает всякие сообщения в окно служебных сообщений и в статусную строку. В исходном состоянии (модуль обработки под паролем, коды 1 на месте) все работает, сообщения выводятся по ходу работы, статусная строка обновляется. В обфусцированном же состоянии (кроме всего прочего, из скомпилированного образа модуля выкинуты все коды 1) интерфейс замерзает почти сразу, ничего не меняется, и только в конце появляются все сообщения разом. Не обращал на это раньше внимания, спасибо, теперь буду знать!     | |||
| 172
    
        TormozIT гуру 04.04.13✎ 20:04 | 
        Ну уже думаю можно подвести небольшие итоги исследования.
  Удаление опкода новой строки (например через удаление символа перевода новой строки в исходном тексте) влечет 1. Значительное снижение частоты обработки оконных команд приложения. 2. Значительное снижение частоты контроля прекращения работы сеанса на сервере. 3. Серьезные сложности с отладкой кода. Т.е. делать так имеет смысл только когда уже фрагмент хорошо отлажен и скорость его выполнения действительно перевешивает все эти негативные моменты. | |||
| 173
    
        Maxus43 04.04.13✎ 20:08 | 
        (172) на партнёрке тебе вроде нормально написали из 1с чего и куда это влияет. на каждом форуме тема эта будет?)     | |||
| 174
    
        TormozIT гуру 04.04.13✎ 20:17 | 
        (173) У большинства пользователей этого форума туда нет доступа. Кажется многим здесь интересно эта тема.     | |||
| 175
    
        Maxus43 04.04.13✎ 20:20 | 
        (174) тема интересна, не спорю, выкладывай уж ответ 1с тогда, там противоречие с (172) пункт 2 например, т.е. проверка прекращения сеанса привязана ещё и к серверным вызовам, т.е. цикл в одной строке где обращаемся к серверу - прервётся сразу всё равно, невзирая на то что всё в 1 строку     | |||
| 176
    
        TormozIT гуру 04.04.13✎ 20:32 | 
        (175) В (172) в п. 2 имелось ввиду выполнение кода на сервере. Так что противоречия нет. По поводу цитирования ответов 1с в (142) я привел ответ, о котором ты пишешь.     | |||
| 177
    
        Владимир1С 04.04.13✎ 20:36 | 
        (176) Так что, до 20% ускорение гарантировано?     | |||
| 178
    
        TormozIT гуру 04.04.13✎ 20:36 | 
        (177) Тролям да)     | |||
| 179
    
        Maxus43 04.04.13✎ 20:37 | 
        ну всё не читал)
  Если честно - считаю Оптимизацию ТАКИМ путём - верх паранойи. Там задержки доли секунды, на РЕАЛЬНЫЕ алгоритмы из жизни - мало влияния, на типовых например, да и на других. Оптимизация алгоритмов и запросов даст больше профита чем это. Есть конечно варианты экстремальной оптимизации, как например Фрагстер делал, раскладывал большую строку на подстроки с помощью ЗначениеИзСтрокиВнутр. Есть резоны иногда, но НЕЧИТАЕМО абсолютно. В топку, есть намного актуальней проблемы производительности от неправильного проетирования, кривых запросов и быдлокода. Займёмся делом лучше, а не сомнительной оптимизацией | |||
| 180
    
        Владимир1С 04.04.13✎ 20:38 | 
        (178) А по-русски?     | |||
| 181
    
        TormozIT гуру 04.04.13✎ 20:39 | 
        (180) Если ты не троль, то нет. Ответ очень зависит от самого кода.     | |||
| 182
    
        Владимир1С 04.04.13✎ 20:39 | 
        (179) То есть после всех остальных действий, делаем одну строку, оставляя эталонную конфу в читабельном виде. так?     | |||
| 183
    
        TormozIT гуру 04.04.13✎ 20:39 | 
        (179) Ну хотя бы на партнерском форуме то все читал? Видимо не все. Снова повторяю, что здесь не выигрыш в скорости интересен, а отбивание желания его получить таким извращенным путем.     | |||
| 184
    
        Владимир1С 04.04.13✎ 20:41 | 
        (179) :) Последний способ оптимизации перед покупкой нового железа %)     | |||
| 185
    
        Владимир1С 04.04.13✎ 20:42 | 
        (181) Чем проще код, тем ощутимее выигрыш. понято.     | |||
| 186
    
        Maxus43 04.04.13✎ 20:46 | 
        (183) я как раз подумал что ты хочешь именно такой способ использовать для повышения производительности, и есно не согласен. Что и говорили остальные на партнёрке)     | |||
| 187
    
        Владимир1С 04.04.13✎ 20:50 | 
        (186) При исчерпании всех остальных методов и наличия экономической целесообразности можно и это "чудо" применить. Руки то не отвалятся.     | |||
| 188
    
        Maxus43 04.04.13✎ 20:54 | 
        (187) чем бы дитя не тешилось, лишь бы не плакало (с)
  очень сомнительно это "чудо"... | |||
| 189
    
        Владимир1С 04.04.13✎ 20:55 | 
        (188) Последняя фора забывчивому сисадмину, чтобы успеть закупить новое железо :)     | |||
| 190
    
        Maxus43 04.04.13✎ 20:59 | 
        не видел пока админов, которым бы было интересно хватает ли железок 1-ске) за полгода не скажешь что пора брать новое - хрен чего закупят     | |||
| 191
    
        Владимир1С 04.04.13✎ 21:08 | 
        (190) Давай % от закупки админу - всегда будут самые новые железки :)     | |||
| 192
    
        TormozIT гуру 05.04.13✎ 10:03 | 
        (150) Ошибочное преположение.
  (152), (153) Производитель на мой вопрос "ключ -debug у рабочего процесса как то связан компиляцией или выполнением опкода новой строки?" ответил, что "При включенном debug режиме, отладчик может выполнять свои действия при выполнении опкода новой строки." Хотя ответ в очередной раз очень лаконичен, но можно предположить, что опкод новой строки компилируется в обоих режимах, но в режиме debug его выполнение вызывает функцию обработки действий отладчика (есть ли подключенный отладчик). | |||
| 193
    
        Крутил_ Вертел_1С 08.04.13✎ 05:34 | 
        Помню когда кодил долго на PHP, SQL вот там плясал над каждым байтом и над каждой миллисекундой.
  Но делать тоже самое в 1С)))) как по мне маразм.... лучше смотреть в сторону процессов на машине, ПО и железа, чем сувать код модуля в одну строку. | |||
| 194
    
        Кирпич 08.04.13✎ 19:03 | 
        (192) ты их спроси еще неплохо бы сделать свертку констант. 
  а то от людей стыдно. "а = 100 + 200 + 300" будет выполнятся в два раза медленнее чем просто "а = 600" | |||
| 195
    
        SherifSP 09.04.13✎ 18:09 | 
        Заметил что Условие "<>" быстрее отрабатывает, чем условие "Не ="     | |||
| 196
    
        TormozIT гуру 09.04.13✎ 18:22 | 
        (195) Ну это понятно, т.к. количество операций (инструкций) 1 против 2.     | |||
| 197
    
        Chin 09.04.13✎ 18:31 | 
        Проверил :) Автор прав...
  Цикл вида: Для Цк=1 по 10000000 Цикл А = 1; КонецЦикла Выполняется 9 секунд Тоже в одну строку: Для Цк=1 по 10000000 Цикл А = 1; КонецЦикла; Выполняется 5 секунд Это без отладки. В отладке на порядок больше... | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |