Индикатор прогресса при обработке больших объёмов, дополнение 1

Дополнение к старой записи Индикатор прогресса при обработке больших объёмов.

* * *

Можно убить окно SAP GUI в версии, если заспамить:

Проверено на SAP GUI 7.40 Patch Level 5

* * *

Кроме ФМ ‘SAPGUI_PROGRESS_INDICATOR’, есть ещё класс CL_PROGRESS_INDICATOR с дополнительными параметрами.
Можно указать не только текст, но и сообщение по номеру, да ещё и с параметрами:

Можно не рассчитывать процент, а указать непосредственно итерационные значения:

Для предотвращения спама есть параметр I_OUTPUT_IMMEDIATELY:

Работает этот параметр следующим образом: после отправки обновления индикатора прогресса объявляется десятисекундный мораторий. Константа времени — hardcoded.
Выходит не очень гладко, но такой подход имеет право на существование.

* * *

Если вдруг наткнетесь на ФМ ‘PROGRESS_INDICATOR’, то можете проходить мимо него. Это просто обертка для класса CL_PROGRESS_INDICATOR, причем не самая лучшая.
Если приглядеться к ней внимательней, то внутри можно обнаружить динамический вызов:

Всё бы ничего, просто особого смысла в динамическом вызове тут нет, а дополнительные накладные расходы составляют примерно 25 секунд на миллион вызовов.
У прямого же вызова CL_PROGRESS_INDICATOR накладные расходы составляют примерно 5 секунд на миллион вызовов, что немного чересчур, если быть очень придирчивым. И если для вас это вдруг критично, то начальный подход уменьшит ваши накладные расходы до полусекунды на миллион итераций.

Кстати, накладные расходы на вызов ‘SAPGUI_PROGRESS_INDICATOR’ составляют примерно 330 секунд на миллион вызовов.

ЗЫ. Все цифры сняты со сферического сервера в вакууме. Ваши цифры имеют право быть другими.

Опубликовано 20.11.2016 в 15:43 · Автор ivan · Ссылка
Рубрики: ABAP

Написать комментарий