-
-
Save EvilBeaver/11c252f13199afca45c350442bd6dcfb to your computer and use it in GitHub Desktop.
Н = 50000000; | |
Массив = Новый Массив(); | |
Массив.Добавить(Ложь); | |
Массив.Добавить(Ложь); | |
Для индекс = 2 По Н Цикл | |
Массив.Добавить(Истина); | |
КонецЦикла; | |
времяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); | |
Для индекс = 2 По Н Цикл | |
Если Массив[индекс] Тогда | |
квадрат = индекс * индекс; | |
Если квадрат <= Н Тогда | |
м = квадрат; | |
Пока м <= Н Цикл | |
Массив[м] = Ложь; | |
м = м + индекс; | |
КонецЦикла; | |
КонецЕсли; | |
КонецЕсли; | |
КонецЦикла; | |
времяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах(); | |
Сообщить("" + (времяОкончания - времяНачала)/1000); |
метод Скрипт() | |
знч Н = 5000000 | |
пер Массив = новый Массив() | |
Массив.Добавить(Ложь) | |
Массив.Добавить(Ложь) | |
для индекс = 2 по Н | |
Массив.Добавить(Истина) | |
; | |
знч времяНачала = ДатаВремя.Сейчас() | |
для индекс = 2 по Н | |
если Массив[индекс] | |
пер квадрат = индекс*индекс | |
если квадрат <= Н | |
пер м = квадрат | |
пока м <= Н | |
Массив[м] = Ложь | |
м += индекс | |
; | |
; | |
; | |
; | |
знч времяОкончания = ДатаВремя.Сейчас() | |
знч мсЦикла = (времяОкончания - времяНачала).ВМиллисекундах() | |
Консоль.Записать("" + (мсЦикла/1000)) | |
; |
Мои замеры.
Сделал свой вариант теста на 10 млн и с ускоренным заполнением массива, чтобы меньше ждать https://paste1c.ru/2ezdv7s3tvqe
Oscript - 8 сек в консольном запуске (значение переменой _РежимОтладки не дает заметного влияния)
1С 8.3.25 - 80 сек в оригинальном варианте (_РежимОтладки = Истина, отладчик подключен)
1С 8.3.25 - 8 сек в однострочном варианте (_РежимОтладки = Ложь) https://infostart.ru/1c/articles/1732527/
В комментариях к статье я уже делал похожий тест, но лишь в пределах платформы 1С https://forum.infostart.ru/forum9/topic287808/#message2881082
1С:Исполнитель без отладки решает тот же тест за 6.5 секунд https://paste1c.ru/40fnsi34oy2o , т.е. на 20% быстрее чем интерпретаторы встроенного языка. Тут строгая типизация ожидаемо дает свои плоды.
А с отладкой он решает уже за 12 секунд, т.е. замедление всего в 2 раза.
Выводы
- Надо тщательнее "мыть руки" при замере выполнения кода 1С. Про виды загрязнения я очень подробно и наглядно рассказал в статье про однострочный код.
- Интерпретатор 8.3.25 без механизма отладки по сравнению со старыми версиями не замедлился и даже немного ускорился (по сравнению с 8.2 точно).
- А вот механизм отладки 8.3.25 потяжелел и его накладные расходы при выполнении строки кода (опкода новой строки) стали немного больше чем были в 8.2
- Заметной разницы в скорости работы интерпретаторов 1С и Оскрипт с запрещенной отладкой или в однострочном режиме нет!
Заметной разницы в скорости работы интерпретаторов 1С и Оскрипт с запрещенной отладкой или в однострочном режиме нет!
Но пишем код мы обычно не в одну строчку.
кстати, хоть я и стесняюсь, но все же похвастаюсь.... моя Перфолента проиграла и Джаве и Шарпу в расчете Эратосфена, но зато стабильно выигрывает у них в заполнении массива! Типичный результат:
47 мс
640 мс
есть еще над чем работать :)
В общем, всем нам удачи и успехов в развитии своих поделок!!!