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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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