-
-
Save EvilBeaver/11c252f13199afca45c350442bd6dcfb to your computer and use it in GitHub Desktop.
Н = 50000000; | |
Массив = Новый Массив(); | |
Массив.Добавить(Ложь); | |
Массив.Добавить(Ложь); | |
Для индекс = 2 По Н Цикл | |
Массив.Добавить(Истина); | |
КонецЦикла; | |
времяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); | |
Для индекс = 2 По Н Цикл | |
Если Массив[индекс] Тогда | |
квадрат = индекс * индекс; | |
Если квадрат <= Н Тогда | |
м = квадрат; | |
Пока м <= Н Цикл | |
Массив[м] = Ложь; | |
м = м + индекс; | |
КонецЦикла; | |
КонецЕсли; | |
КонецЕсли; | |
КонецЦикла; | |
времяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах(); | |
Сообщить("" + (времяОкончания - времяНачала)/1000); |
метод Скрипт() | |
знч Н = 5000000 | |
пер Массив = новый Массив() | |
Массив.Добавить(Ложь) | |
Массив.Добавить(Ложь) | |
для индекс = 2 по Н | |
Массив.Добавить(Истина) | |
; | |
знч времяНачала = ДатаВремя.Сейчас() | |
для индекс = 2 по Н | |
если Массив[индекс] | |
пер квадрат = индекс*индекс | |
если квадрат <= Н | |
пер м = квадрат | |
пока м <= Н | |
Массив[м] = Ложь | |
м += индекс | |
; | |
; | |
; | |
; | |
знч времяОкончания = ДатаВремя.Сейчас() | |
знч мсЦикла = (времяОкончания - времяНачала).ВМиллисекундах() | |
Консоль.Записать("" + (мсЦикла/1000)) | |
; |
И через три года:
1С 8.3.12 - 382 сек.
1С 8.3.22 - 518 сек
1С 8.3.25 - 523 сек
1С Executer 2020.2.5-23 U(JVM 17) - 50 сек
OneScript - 50 сек
1С Executer 5.2 U(JVM 17) - 28 сек
Аналогично Apple, замедляем предыдущие версии чтобы новые казались скоростными? (Ниже ответ Сергея - отладка в 1С становится все удобнее)
https://mista.ru/topic/895098
Исполнитель действительно сильно оптимизировали по производительности, я не замерял, но по ощущениям - должен прям шустро начать работать
должен прям шустро начать работать
речь об ещё не опубликованном идет?
только что скачал последний релиз исполнителя версии 5_2_6_3 и проверил... похоже не сильно ускорился...
на моём ноутбуке результаты такие получились:
-Исполнитель 5.2:
Время, с: 30.352
Время, с: 136.717
-OneScript 1.9
Время, с: 37.885
Время, с: 106.363
первое число это заполнение массива, а второе расчет эратосфена...
т.е. в заполнении массива Исполнитель выиграл у ОСкрипта, а в расчете проиграл...
кстати, о массивах... тот скрипт для Исполнителя, который в шапке - устарел, т.к. теперь массиву надо указать хранящийся в нём тип... возможно поэтому исполнитель и выиграл у ОСкрипта заполнение массива, что массив типизированный...
СЮРПРИЗ! (возможно только для меня :) )
пока писал этот текст, пришло в голову, что Исполнители X и U могут наверное с разной скоростью работать... так и оказалось...
выше был результат Исполнителя X, а Исполнитель U той же версии показал такие результаты:
Время, с: 13.297
Время, с: 60.211
т.е. шустре в 2 раза, даже чуть больше!
Но Абсолютным победителем стала JAVA 11, которая с массивом типа ArrayList показала:
4169 мс
15919 мс
а с массивом типа boolean[] показала рекордные:
59 мс
453 мс !!!!
Для сравнения C# с массивом типа List дал:
187,2646 мс
609,3799 мс
а с массивом типа bool[] смог вытянуть:
62,3883 мс
500,0454 мс
немного уступив джаве....
ну и горькая пилюля - лучший из интерпретаторов проиграл компиляторам более, чем в 100 раз... :(
так что лучшим решением можно признать симбиоз интерпретаторов и компиляторов, где каждый делает то, что у него лучше получается...
кстати, хоть я и стесняюсь, но все же похвастаюсь.... моя Перфолента проиграла и Джаве и Шарпу в расчете Эратосфена, но зато стабильно выигрывает у них в заполнении массива! Типичный результат:
47 мс
640 мс
есть еще над чем работать :)
В общем, всем нам удачи и успехов в развитии своих поделок!!!
Мои замеры.
Сделал свой вариант теста на 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С и Оскрипт с запрещенной отладкой или в однострочном режиме нет!
Но пишем код мы обычно не в одну строчку.
В первом файле указано 50 млн циклов, а во втором только 5... народ не глядя запускает и удивляется, почему Исполнитель работает быстрее Односкрипта... :)