Что быстрее: = Неопределено или = ПустаяСсылка #305146


#0 by TeaM
Одинаково ли быстро идет присвоение ссылочному реквизиту например в таких фрагментах кода? :
#1 by ТелепатБот
#2 by Wehrmacht
А замер производительности на что?
#3 by marvak
имхо распределяется так по быстроте 1. 3. 2.
#4 by TeaM
Хотелось бы знать теоретическое обоснование почему и как.
#5 by marvak
а вообще это все мелочи, имхо на этом не стоит экономить присваивай то, что по смыслу программы больше подходит
#6 by marvak
во втором случае - вызов метода, однозначно медленнее чем просто присвоение пусой ссылки. а 1) быстрее потому что при получении пустой ссылки система определяет еще тип ссылки, а значению Неопределено тип покую
#7 by Irbis
Примерно по тем же причинам что и скорость помещения 0 а регистр процессора в первом случае значение предопределено платформой, во втором необходимо сформировать, в третьем заранее сформировано. ИМХО.
#8 by TeaM
Почему 3 быстрее чем 2 - могу понять - не надо заниматься разыменовыванием и работой с метаданными. Хотя - а что если все это делается уже на этапе компиляции модуля и оперативной памяти превращается в одни и те же инструкции? Но почему все-таки 1 должно быть быстрее чем 3 ?
#9 by TeaM
Пока писал - уже ответили.
#10 by TeaM
Благодарю. Теперь понял.
#11 by TeaM
Всегда старался заранее сформировать пустую ссылку, - думал, что если укажу =Неопределено, то при присвоении из этого Непределено программе придется формировать пустую ссылку заданного типа - чтобы присвоить реквизиту, но выходит все совсем не так, а как раз наоборот. Тем лучше!
#12 by marvak
разница, повторюcь, может замером и не выявиться, настолько она ничтожна
#13 by SilentMan
Учитывая тот факт, что 1 не равно 2 и 3 - сравнение выглядит скорее академическим.
#14 by France
легко замеряется... для этого нужно большое количество присвоений сделать в цикле))..
#15 by hhhh
мне думается, что 1 - самый тормозной, потому что она еще делает преобразование типов.
#16 by France
#17 by marvak
я к тому, что даже при большом количестве разница будет маленькой
#18 by France
ой ли))) в 16 статистика)))...
#19 by marvak
ага, значит неправ по разнице все таки вызов метода дает о себе знать! :)
#20 by France
да - вызов метода впечатлил.. хорошо, что у меня  чаще всего срабатывает привычка от паскаля заранее определять переменные))..
#21 by hhhh
ты вообще совершенно не то сделал! У тебя спрашивали присвоение реквизиту справочника, а ты присваиваешь переменной. Видимо, не проснулся с утра.
#22 by marvak
но если будешь параллельно с этими присвоениями делать что-нить еще, то разница между ними будет ничтожной по сравнению с выполнением этого "чего-нить еще". ;) а последовательность я угадал :)
#23 by France
проще, если ты глаза протреш.. присвой реквизиту справочника и сравнивай... на...
#24 by hhhh
там расклад может быть другой.
#25 by France
не ленись и поработай... заодно покаже мне, где в присвоение реквизиту..
#26 by hhhh
Там же написано:
#27 by France
14, 37,15
#28 by France
ага.. там еще написано РеквизитТипаНоменклатура = Справочники.Номенклатура.ПустаяСсылка;!!! и на заборе МИР написано..
#29 by GenV
Сейчас попробую с реквизитом на форме, а то спор читать не интересно :)
#30 by France
29 с чем бы не проверил, правая часть остается НЕИЗМЕННОЙ!!! изменится только общее время присвоение, а не пропорции))
#31 by GenV
29+ На форме реквизит, тип один - ссылка на справочник Код 100 000 повторений Реквизит = КонкретноеЗначение; 40,75 % Реквизит = ПустаяСсылка;       29,30 %
#32 by GenV
31+ если создали объект только в памяти и изменяем его реквизит типа ссылка:
#33 by TeaM
Проверил по методу - получил 1 - 140 сек - на 20 миллионов циклов Похоже, что при компиляции это все выливается в один и тот же код...
#34 by Torquader
Я бы ещё чего-то присваивал, так как присвоение пустого значения по пустому, и пустого после непустого явно различаются.
#35 by GenV
Время выполнения строки кода при 100 000 повторений 1 вариант - присвоение как в , 2 - после каждого присвоения присваиваем конкретное значение, выбранное на форме и сохраненное в переменной ЗЫ Конечно надо бы сделать как минимум 3 прогона и взять среднее, но в общем смысл ясен :)
#36 by vogenut
не правильно вы все меряете. в цикле должна идти пачка присваиваний, иначе может оказаться, что код самого цикла будет занимать большую часть времени.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С