|
Загадка 1с, кто сможет ответить? | ☑ | ||
---|---|---|---|---|
0
Elf56
12.05.17
✎
08:56
|
Коллеги всем доброго времени суток.
Имеется 1С:Предприятие 8.3 (8.3.9.2170) И очень простенькая обработка с самым простым текстом привожу его ниже Процедура КнопкаВыполнитьНажатие(Кнопка) А = 0; Б = 0; ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); Для Ин = 1 По 100000 Цикл А = А + Ин; КонецЦикла; ВремяКонцаВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах(); ВремяВыполненияВМиллисекундах = ВремяКонцаВыполнения - ВремяНачала; Сообщить(ВремяВыполненияВМиллисекундах); ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах(); Для Ин = 1 По 100000 Цикл А = А + Ин; КонецЦикла; ВремяКонцаВыполнения = ТекущаяУниверсальнаяДатаВМиллисекундах(); ВремяВыполненияВМиллисекундах = ВремяКонцаВыполнения - ВремяНачала; Сообщить(ВремяВыполненияВМиллисекундах); КонецПроцедуры Теперь сам вопрос. В не зависимости какой будет цикл в одну строку первым или вторым он всегда будет выполняться в разы быстрее чем второй хоть он полностью скопирован с другого цикла, но просто размещен в одну строку у меня цикл в одну строку выполняется за 141, а цикл в три строки за 1000. Кто знает причину этого? мне стало прямо интересно почему так? может это еще одна скрытая возможность оптимизации кода 1с ? ))) |
|||
1
Naf2017
12.05.17
✎
08:57
|
Баян
|
|||
2
april
12.05.17
✎
09:01
|
надо все типовые в одну строку переписать!
|
|||
3
Кирпич
12.05.17
✎
09:02
|
(0) напиши разработчикам 1с письмо с описанием данной проблемы. письмо напиши в одну строку, чтобы быстрее прочитали.
|
|||
4
Elf56
12.05.17
✎
09:05
|
(3) это ты пошутил или серьезно ? )))
|
|||
5
Asmody
12.05.17
✎
09:07
|
КакиеШуткиТутМироваяСенсация!!!111111одинодин
|
|||
6
МихаилМ
12.05.17
✎
09:07
|
давненько этого вопроса не было.
ах пятница. |
|||
7
Adilgeriy
12.05.17
✎
09:08
|
(1) а по подробней
|
|||
8
ShAV
12.05.17
✎
09:08
|
(0) перед вторым циклом попробуй вставить "А=0;"
|
|||
9
Кирпич
12.05.17
✎
09:08
|
о блин. я пятая колонна оказывается
|
|||
10
Aleksey
12.05.17
✎
09:09
|
||||
11
ShAV
12.05.17
✎
09:09
|
+(8) либо во втором цикле "А" исправь на "Б"
|
|||
12
Elf56
12.05.17
✎
09:10
|
(11) пробовал и с Б тоже результат тот же специально тут А два раза указал )
|
|||
13
Elf56
12.05.17
✎
09:10
|
(6) пятница да ) развлечение для мозга )
|
|||
14
Кирпич
12.05.17
✎
09:11
|
(7) эта фигня еще с 7.7 тянется
|
|||
15
Крэкпэк
12.05.17
✎
09:11
|
А если второй цикл тоже записать в одну строку, то он будет быстрее первого ))
|
|||
16
golem14
12.05.17
✎
09:12
|
у меня 48 и 196
|
|||
17
Aleksey
12.05.17
✎
09:12
|
||||
18
kzot
12.05.17
✎
09:12
|
(0) А повтори в обратном порядке.
|
|||
19
mehfk
12.05.17
✎
09:14
|
Ура! Пятничная тема!
|
|||
20
Elf56
12.05.17
✎
09:19
|
запустил предприятие не из конфигуратора а по ярлыку вот такие результаты выдало
172 203 остальная разница в 31 миллисекунду идет на специальный байт-код, который используется чтобы при развале с исключением в модуле, поставляемом без исходного кода, сориентироваться и выдать сообщение типа "Ошибка в строке 30". Это описано в теме ссылка на которую выше |
|||
21
Кирпич
12.05.17
✎
09:22
|
(20) ну будем считать, что пофиксили. хотя могли бы обойтись и без "специальный байт-код" конечно
|
|||
22
Гипервизор
12.05.17
✎
09:23
|
(0)
230 242 А подсказать еще одну скрытую возможность оптимизации кода 1с так и быть могу: не объявлять неиспользуемые переменные. |
|||
23
Гобсек
12.05.17
✎
09:23
|
(0)Лично для меня это новость. Но я могу предположить, что если цикл занимает несколько строк, то в случае зависания можно программу запустить под управлением отладчика, нажать на кнопку "пауза" и исполнение остановится внутри цикла. Если цикл занимает одну строку, то в случае зависания выявить место, где программа зациклилась, этим способом не получится. То есть выигрыш в производительности достигается за счет проигрыша в некоторых других отношениях.
Предлагаю ТС провести эксперимент и сообщить о результатах. |
|||
24
VanDiesel
12.05.17
✎
09:24
|
Ну у тех кто начинал кодить на заре программирования или у тех кто кодил в ассемблере - такие вопросы не возникают.
|
|||
25
dezss
12.05.17
✎
09:25
|
||||
26
Гобсек
12.05.17
✎
09:32
|
(23)+ При проведении эксперимента цикл надо использовать бесконечный
|
|||
27
Elf56
12.05.17
✎
09:34
|
(23) именно поэтому если запустить предприятие из конфигуратора в режиме отладки будет разница не 172 и 203, а 141 и 1000
|
|||
28
Elf56
12.05.17
✎
09:35
|
интерпретатор тратит время на преобразование каждой строки для отладки
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |