Есть ли снижение производительности при использовании ВНЕШНИХ переменных рабочей памяти? - PullRequest
0 голосов
/ 11 декабря 2018

Этот вопрос касается IBM Enterprise COBOL 4.2.

У меня есть программа, которая требует изменения и увеличения рабочего буфера хранения.К сожалению, это увеличение размера буфера поставило меня на максимальный размер 128 МБ для рабочей области хранения.Мой план состоял в том, чтобы взять некоторые из больших 01 переменных и сделать их EXTERNAL, но я обеспокоен тем, что это повлияет на производительность системы.

Кто-нибудь знает, если внешняя работа рабочих переменных хранения замедлит системупроизводительность?

Мне сказали, что примерно через год мы перейдем на COBOL 6.1, поэтому, если это небольшое снижение производительности, мы сможем справиться с этим, пока не получим 6.1 (где рабочая памятьпределы были увеличены до 2G)

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

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

working-storage section.
01 ws-data pic x(8).
01 ext-data pic x(8) external.
linkage section.
01 ls-data pic x(8).
procedure division using ls-data.
begin.
    move spaces to ws-data
    move spaces tp ext-data
    move spaces to ls-data
    goback
    .

Я подозреваю, что нет разницы между доступом к ext-data и ls-data.

предоставит конкретную информацию о том, какой «хит» ожидать.

0 голосов
/ 18 декабря 2018

При поиске ВНЕШНЕГО элемента данных требуется дополнительная проверка (и поиск имени).Эта обработка выполняется один раз для каждого ВНЕШНЕГО элемента данных уровня 01, определенного в каждой программе, при запуске программы.Кроме того, существуют дополнительные издержки на управление памятью для ВНЕШНЕГО элемента данных (по сравнению с определенным элементом данных рабочей памяти).

0 голосов
/ 12 декабря 2018

Прежде всего, если вы использовали максимум WORKING-STORAGE (128 Мб) и вам нужно больше, вам придется использовать пространство EXTERNAL.Влияет ли это на производительность или нет, она вам все равно понадобится.Это может замедлить вашу производительность (поскольку компилятору нужно загружать больше данных), но эта задержка незначительна.

Во-вторых, скомпилируйте вашу программу с параметром OPTIMIZE(FULL), в котором будут перечислены все неиспользуемые переменные вваша программа (и я уверен, что вы найдете некоторые).Это может сэкономить место и намного более чистый код.

Надеюсь, это поможет.

...