Что более ресурсоемкое? Цикл или рекурсия?
Сравните 2 функции. И выскажите свое мнение: что из них больше потребляет процессорного времени и памяти:
Функция Родители(Элем, Сп)
Перем Род;
Род=Элем.Родитель;
Пока ПустоеЗначение(Род)=0 Цикл
сп.ДобавитьЗначение(Род);
Род=Род.Родитель;
КонецЦикла;
Возврат сп;
КонецФункции
ПоказатьПроцедура УсеРодители(элем, сп)
Если ПустоеЗначение(элем.Родитель)=1 Тогда
Возврат;
Иначе
сп.ДобавитьЗначение(элем.Родитель);
УсеРодители(элем.Родитель,сп);
КонецЕсли;
КонецПроцедуры
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Давай эти две строчки еще удалим у тебя для чистоты эксперимента? Будем предполагать, что список пуст.
-------------
Перем Род;
сп.УдалитьВсе();
-------------
З.Ы. А как память замерить в отладчике? Я отладчиком в 1С еще не разу толком не пользовался:-) Вот время нашел как мерять, вернее как-то игрался, знаю:-)))
-------------
Перем Род;
сп.УдалитьВсе();
-------------
З.Ы. А как память замерить в отладчике? Я отладчиком в 1С еще не разу толком не пользовался:-) Вот время нашел как мерять, вернее как-то игрался, знаю:-)))
(4) Вторую убрал. А зачем 1 строку удалять?
Я тебе и так могу сказать про память.... При оооочень большом количестве вызовов система рухнет :-)
Кая я понимаю, каждая вызванная процедура(функция) откусывает кусок оперативки, даже если в ней не создаются локальные переменные.
Я тебе и так могу сказать про память.... При оооочень большом количестве вызовов система рухнет :-)
Кая я понимаю, каждая вызванная процедура(функция) откусывает кусок оперативки, даже если в ней не создаются локальные переменные.
(5) Ну, естественно, рекурсия и медленнее, да и скорее всего затратнее по памяти в 1С в семерке, по времени больше занимает, я замерил:) А при большом количестве вызовов и то, и то рухнет, памяти на хранение списка значений не хватит:) А в других средах интересно? В С как, например? Кто знает, мерил?
Александр Венгер пишет:
памяти на хранение списка значений не хватит:)
памяти на хранение списка значений не хватит:)
Это просто будет выполняться бесконечно
Функция Родители()
Пока 1=1 Цикл
КонецЦикла;
Возврат 1;
КонецФункции
А это через n-ое количество времени еще и повесит винду из-за недостатка памяти
Процедура УсеРодители()
УсеРодители();
КонецПроцедуры
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот