Как вы знаете, в ABAP существует несколько способов добавить строку во внутреннюю таблицу. Сегодня я предлагаю вам выяснить какой из них является самым быстрым.

Этот тест не претендует на полноту, однако практикующим разработчикам могут быть интересны его результаты.

Исходные данные

В тесте, строки будет добавлять во внутреннюю таблицу типа STANDARD TABLE, без указания ключевых полей.

Будут рассмотрены следующие условно названные способы:

  1. APPEND
  2. APPEND WITH CLEAR BEFORE
  3. APPEND INITIAL LINE
  4. APPEND VALUE
  5. BASE

Перед тем как начать, о каждом из них чуть более подробно.

Некоторые детали

APPEND

Пожалуй, самый старый и самый известный способ добавить строку во внутреннюю таблицу. Уверен, каждый из нас его использовал. Надежный, как швейцарские часы.

APPEND WITH CLEAR BEFORE

APPEND часто используется внутри цикла. Код в цикле может быть организован таким образом, что нужно очищать рабочую область. Для этого используется CLEAR. Случай настолько часто встречается, что не лишним будет рассмотреть его отдельно.

APPEND INITIAL LINE

Еще один вариант — добавить пустую строку, присвоив этой строке FIELD-SYMBOL, а затем заполнить необходимые поля. Иногда это весьма удобно.

APPEND VALUE

Пришел к нам вместе с обновлением 7.4. Удобен тем, что можно «на лету» добавлять строку в таблицу не объявляя отдельно структуру.

BASE

Экзотический вариант. На первый взгляд хорош тем, что результат операции находится слева. Читать такой код удобнее, т.к. не приходится водить глазами влево/вправо. Таким же преимуществом, кроме всего прочего, обладают и методы с RETURNING параметрами.

Методика тестирования

Методика простая.

Каждым из способов по очереди добавим строку во внутреннюю таблицу, скажем, 1000 раз. Получим время выполнения этих операций. Также, по результатам прогона каждому способу присвоим его место (лучшее время — первое место, худшее — последнее).

Сделав 1000 таких прогонов сможем получить среднее время выполнения 1000 операций добавления строки для каждого способа.

Пишем код

Для выполнения теста был написан следующий отчет. Вы можете использовать его, например, для проверки получившихся результатов.

Анализируем результат

Запустив отчет, получим следующий результат:

Результат работы отчета

Самым быстрым оказался классический APPEND. Из 1000 прогонов он 951 раз был быстрее всех и заслуженно занимает первое место.

Далее, как мы видим, операция CLEAR перед APPEND заняла достаточное время, чтобы уступить второе место APPEND INITIAL LINE и поэтому занимает третье место.

Скромное четвертое место с удовлетворительным средним результатом занимает способ с добавлением строки «на лету» APPEND VALUE. Способ все еще достаточно быстрый, но проигрывает первому месту уже более чем в 1,5 раза.

И напоследок BASE

Что ж, скорость выполнения это не про него. Стабильное последнее место во всех прогонах. Это при том, что добавляемая структура содержала небольшое количество (3) простых полей.

На графике ниже, полученном на основе данных теста, также отчетливо видно существенное преимущество первых четырех способов над последним.

Скорость выполнения 1000 операций, для 1000 прогонов

Чтобы получше рассмотреть рассмотреть график, уберем из него данные о BASE способе. Мы уже выяснили, что он работает медленнее остальных.

Скорость выполнения 1000 операций, для 1000 прогонов (без BASE)

Выводы

Проанализировав результаты теста, делаем следующие выводы:

  1. Если вы хотите чтобы ваша строка залетала во внутреннюю таблицу со скоростью пули, летящей из револьвера дикого ковбоя на не менее диком Западе — используйте классический APPEND.
  2. APPEND INITIAL LINE И APPEND VALUE — хороший выбор. Можно смело использовать любой из них и не переживать о скорости выполнения.
  3. Если ваш бунтарский дух еще не готов смириться с рутиной и требует перемен — используйте BASE. Однако, помните, что на большом количестве итераций или больших данных он может замедлить вашу программу на пару секунд.

На сегодня все.

Подписывайтесь на канал в Telegram.

Пока!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.