Created
February 24, 2021 19:43
-
-
Save EvilBeaver/11c252f13199afca45c350442bd6dcfb to your computer and use it in GitHub Desktop.
Тесты производительности Решето Эратосфена
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Н = 50000000; | |
Массив = Новый Массив(); | |
Массив.Добавить(Ложь); | |
Массив.Добавить(Ложь); | |
Для индекс = 2 По Н Цикл | |
Массив.Добавить(Истина); | |
КонецЦикла; | |
времяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); | |
Для индекс = 2 По Н Цикл | |
Если Массив[индекс] Тогда | |
квадрат = индекс * индекс; | |
Если квадрат <= Н Тогда | |
м = квадрат; | |
Пока м <= Н Цикл | |
Массив[м] = Ложь; | |
м = м + индекс; | |
КонецЦикла; | |
КонецЕсли; | |
КонецЕсли; | |
КонецЦикла; | |
времяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах(); | |
Сообщить("" + (времяОкончания - времяНачала)/1000); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
метод Скрипт() | |
знч Н = 5000000 | |
пер Массив = новый Массив() | |
Массив.Добавить(Ложь) | |
Массив.Добавить(Ложь) | |
для индекс = 2 по Н | |
Массив.Добавить(Истина) | |
; | |
знч времяНачала = ДатаВремя.Сейчас() | |
для индекс = 2 по Н | |
если Массив[индекс] | |
пер квадрат = индекс*индекс | |
если квадрат <= Н | |
пер м = квадрат | |
пока м <= Н | |
Массив[м] = Ложь | |
м += индекс | |
; | |
; | |
; | |
; | |
знч времяОкончания = ДатаВремя.Сейчас() | |
знч мсЦикла = (времяОкончания - времяНачала).ВМиллисекундах() | |
Консоль.Записать("" + (мсЦикла/1000)) | |
; |
Выводы
- Надо тщательнее "мыть руки" при замере выполнения кода 1С. Про виды загрязнения я очень подробно и наглядно рассказал в статье про однострочный код.
- Интерпретатор 8.3.25 без механизма отладки по сравнению со старыми версиями не замедлился и даже немного ускорился (по сравнению с 8.2 точно).
- А вот механизм отладки 8.3.25 потяжелел и его накладные расходы при выполнении строки кода (опкода новой строки) стали немного больше чем были в 8.2
- Заметной разницы в скорости работы интерпретаторов 1С и Оскрипт с запрещенной отладкой или в однострочном режиме нет!
Заметной разницы в скорости работы интерпретаторов 1С и Оскрипт с запрещенной отладкой или в однострочном режиме нет!
Но пишем код мы обычно не в одну строчку.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Мои замеры.
Сделал свой вариант теста на 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 раза.