Артём написал: был GetOptimalPriceList - его убрали, но я нашёл его в исходниках и это посути тот же GetOptimalPrice, в том же цикле. Видимо по-этому и убрали.
Нет, не убрали, но он заточен под специфические задачи провайдера. Оптимальное использование CCatalog::GetOptimalPrice (предварительный кеш данных для скидок и подгрузку цен) посмотрите в bitrix/modules/catalog/load/yandex_run.php
А как же быть в таком случае, когда yandex_run.php на получение результата GetOptimalPrice() по ОДНОМУ товару сам тратит одну треть секунды?
Каталог 600 000+ товаров. Вывод 24 товаров на странице с проверкой скидок примерно 7 секунд. При отключении GetOptimalPrice() - 1 секунда. 5200+ правил работы с корзиной.
Пока не понятно в чем тут оптимальное использование.