-
-
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 мс
есть еще над чем работать :)
В общем, всем нам удачи и успехов в развитии своих поделок!!!