Текущее время: Вс, авг 03 2025, 13:57

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Как определить размер памяти под структуру или внутреннюю таблицу?
СообщениеДобавлено: Чт, июл 19 2007, 15:36 
Специалист
Специалист

Зарегистрирован:
Ср, дек 27 2006, 19:19
Сообщения: 230
Программно
Надо для оценки затрат памяти

Заранее спасибо


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как определить размер памяти под структуру или внутреннюю таблицу?
СообщениеДобавлено: Чт, июл 19 2007, 16:16 
Ассистент
Ассистент

Зарегистрирован:
Ср, окт 25 2006, 23:58
Сообщения: 45
Откуда: Москва
organmusic написал(а):
Программно
Надо для оценки затрат памяти

Заранее спасибо


Ну заранее Вы же не можете определить сколько нужно памяти под внутреннюю таблицу без заполнения ее данными.

Ну а так при debug режиме можно в меню выбрать "Перейти -> Просмотр статусов -> Занимаемая память". Там есть и "раскадровка" памяти занимаемой различными таблицами и функциями.

_________________
Все можно починить, если долго вертеть в руках.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 19 2007, 17:34 
Специалист
Специалист

Зарегистрирован:
Ср, дек 27 2006, 19:19
Сообщения: 230
вот простой макет программы:
----------- Cut ----------------
DATA:
BEGIN OF it_tab OCCURS 0,
.....
END OF it_tab,
n TYPE P,
s TYPE P.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_tab.
.........
WRITE:/ 'Выбрано', n, 'записей', s, 'байт'.
------------ Cut -------------------

n определяется легко - sy-dbcnt или LINES ( it_tab )
далее логично s = n * <размер записи>

Но как в программе (не в отладчике) определить этот самый <размер записи>?

Не хочется каждый раз при правке структуры it_tab
суммировать вручную размеры полей и вставлять в формулу


Последний раз редактировалось organmusic Чт, июл 19 2007, 18:27, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 19 2007, 18:26 
Специалист
Специалист

Зарегистрирован:
Ср, дек 27 2006, 19:19
Сообщения: 230
Нашел в help, оказалось все просто

DESCRIBE TABLE it_tab.
m = sy-tleng. " Размер записи it_tab (в байтах).
n = sy-tfill. " Количество записей в it_tab

и, соответственно, размер таблицы s = m * n
можно еще прибавить sy-tleng на заголовок


Последний раз редактировалось organmusic Чт, июл 19 2007, 18:29, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 19 2007, 18:28 
Ассистент
Ассистент

Зарегистрирован:
Ср, окт 25 2006, 23:58
Сообщения: 45
Откуда: Москва
organmusic написал(а):
вот простой макет программы:
----------- Cut ----------------
DATA:
BEGIN OF it_tab OCCURS 0,
.....
END OF it_tab,
n TYPE P,
s TYPE P.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_tab.
.........
WRITE:/ 'Выбрано', n, 'записей', s, 'байт'.
------------ Cut -------------------

n определяется легко - sy-dbcnt или LINES ( it_tab )
далее логично v = n * <размер записи>

Но как в программе (не в отладчике) определить этот самый <размер записи>?

Не хочется каждый раз при правке структуры it_tab
суммировать вручную размеры полей и вставлять в формулу


Может вот это вот поможет?

Code:
  DATA:
      ltb_sflight TYPE STANDARD TABLE OF sflight.

  SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE ltb_sflight.

  DESCRIBE TABLE ltb_sflight.

  WRITE sy-tfill.
  WRITE sy-tleng.
  WRITE sy-toccu.

  v = sy-tfill * sy-tleng.


с sdn.sap.com:

SY-TFILL

After the statements DESCRIBE TABLE, LOOP AT, and READ TABLE, SY-TFILL contains the number of lines in the relevant internal table.

SY-TLENG

After the statements DESCRIBE TABLE, LOOP AT, and READ TABLE, SY-TLENG contains the length of the lines in the relevant internal table.

SY-TOCCU

After the statements DESCRIBE TABLE, LOOP AT, and READ TABLE, SY-TLENG contains the initial amount of memory allocated to the relevant internal table.

_________________
Все можно починить, если долго вертеть в руках.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 19 2007, 18:29 
Ассистент
Ассистент

Зарегистрирован:
Ср, окт 25 2006, 23:58
Сообщения: 45
Откуда: Москва
organmusic написал(а):
Нашел в help, оказалось все просто

DESCRIBE TABLE it_tab.
m = sy-tleng. " Размер записи it_tab (в байтах).
n = sy-tfill. " Количество записей в it_tab

и, соответственно, размер таблицы s = m * n
можно еще прибавить sy-tleng на заголовок


Припозднился я :-)

_________________
Все можно починить, если долго вертеть в руках.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июл 19 2007, 18:35 
Специалист
Специалист

Зарегистрирован:
Ср, дек 27 2006, 19:19
Сообщения: 230
diatchkov написал(а):
organmusic написал(а):
вот простой макет программы:
----------- Cut ----------------
DATA:
BEGIN OF it_tab OCCURS 0,
.....
END OF it_tab,
n TYPE P,
s TYPE P.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_tab.
.........
WRITE:/ 'Выбрано', n, 'записей', s, 'байт'.
------------ Cut -------------------

n определяется легко - sy-dbcnt или LINES ( it_tab )
далее логично v = n * <размер записи>

Но как в программе (не в отладчике) определить этот самый <размер записи>?

Не хочется каждый раз при правке структуры it_tab
суммировать вручную размеры полей и вставлять в формулу


Может вот это вот поможет?

Code:
  DATA:
      ltb_sflight TYPE STANDARD TABLE OF sflight.

  SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE ltb_sflight.

  DESCRIBE TABLE ltb_sflight.

  WRITE sy-tfill.
  WRITE sy-tleng.
  WRITE sy-toccu.

  v = sy-tfill * sy-tleng.


с sdn.sap.com:

SY-TFILL

After the statements DESCRIBE TABLE, LOOP AT, and READ TABLE, SY-TFILL contains the number of lines in the relevant internal table.

SY-TLENG

After the statements DESCRIBE TABLE, LOOP AT, and READ TABLE, SY-TLENG contains the length of the lines in the relevant internal table.

SY-TOCCU

After the statements DESCRIBE TABLE, LOOP AT, and READ TABLE, SY-TLENG contains the initial amount of memory allocated to the relevant internal table.

Э, нет, не припозднился, в самый раз - ответ более чем исчерпывающий
Спасибо за описание всех нюансов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB