Небольшая демонстрация преимущества алгоритмов. Например, необходимо получить коды справочника по списку элементов. Если делать это простым перебором, то, во-первых, достаточно сильно нагружается SQL сервер, а во-вторых это банально медленно.
Стандартный метод отрабатывает за 0.77 с на 1000 элементов. Т.е. делается чуть больше 1200 запросов в секунду. В принципе, это неплохая скорость.
оСпр = СоздатьОбъект("ЗапросКСправочнику");
оСпр.Инит("Пациенты");
оСпр.ВыбиратьПервые = 1000;
оСпр.ДобавитьРеквизит("ТекущийЭлемент");
спЭлем = оСпр.ВыполнитьЗапрос("СписокЗначений");
НачВремя = _GetPerformanceCounter();
Для К = 1 По спЭлем.РазмерСписка() Цикл
ТекКод = спЭлем.ПолучитьЗначение(К).Код;
КонецЦикла;
КонВремя = _GetPerformanceCounter();
Предупреждение("Отработано за " + (КонВремя - НачВремя) / 1000 + " с.");
Показать
Но можно это же сделать несколькими запросами. В данном случае у меня получилось 0.024 с, т.е. в 30 раз быстрее.
оСпр = СоздатьОбъект("ЗапросКСправочнику");
оСпр.Инит("Пациенты");
оСпр.ВыбиратьПервые = 1000;
оСпр.ДобавитьРеквизит("ТекущийЭлемент");
спЭлем = оСпр.ВыполнитьЗапрос("СписокЗначений");
НачВремя = _GetPerformanceCounter();
оСпр = СоздатьОбъект("ЗапросКСправочнику");
оСпр.Инит("Пациенты");
оСпр.ИспользоватьСписокЭлементов(спЭлем);
оСпр.ДобавитьРеквизиты("ТекущийЭлемент,Код");
тзЭлем = оСпр.ВыполнитьЗапрос();
тзЭлем.ВыбратьСтроки();
Пока тзЭлем.ПолучитьСтроку() = 1 Цикл
ТекКод = тзЭлем.Код;
КонецЦикла;
КонВремя = _GetPerformanceCounter();
Предупреждение("Отработано за " + (КонВремя - НачВремя) / 1000 + " с.");
Показать
Причем оптимизированная версия работает быстрее даже на DBF версии семерки - 0.028 против 0.007.