Текущее время: Ср, июл 30 2025, 10:43

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Чистка памяти после выполнения кода
СообщениеДобавлено: Вт, авг 25 2009, 16:52 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 08:36
Сообщения: 182
Откуда: Russia
Пол: Мужской
Может тупой вопрос, но чего-то клинит меня :) и похожих тем не нашел или плохо искал

Имеем самописный отчет. В отчете вызывается ФМ. ФМ не имеет описанных глобальных переменных, все локальные. В этом ФМ, создаются два объекта стандартных классов. Вызываются всякие разные методы в результате чего формируем внутреннюю таблицу, которая возвращается в вызываемую программу для дальнейшей обработки. В конце кода ФМ пишу FREE <объект1> и FREE <объект2>, объекты вроде как чистятся, но всякие ссылочные от них объекты так и остаются висеть в памяти. Как их почистить? Я может и забил бы на это дело, но слишком много памяти отжирается и не всегда ее хватает на дальнейшую обработку.

_________________
С Уважением Серега


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Вт, авг 25 2009, 17:23 
Специалист
Специалист

Зарегистрирован:
Чт, июн 21 2007, 09:14
Сообщения: 166
Откуда: Москва
Пол: Мужской
R256 написал:
Может тупой вопрос, но чего-то клинит меня :) и похожих тем не нашел или плохо искал

Имеем самописный отчет. В отчете вызывается ФМ. ФМ не имеет описанных глобальных переменных, все локальные. В этом ФМ, создаются два объекта стандартных классов. Вызываются всякие разные методы в результате чего формируем внутреннюю таблицу, которая возвращается в вызываемую программу для дальнейшей обработки. В конце кода ФМ пишу FREE <объект1> и FREE <объект2>, объекты вроде как чистятся, но всякие ссылочные от них объекты так и остаются висеть в памяти. Как их почистить? Я может и забил бы на это дело, но слишком много памяти отжирается и не всегда ее хватает на дальнейшую обработку.


Может, попробовать вызвать сборщик мусора? Правда, не уверен, как это поможет
cl_tpda_ctrl_handler=>start_gc( ).

Цитата:
не всегда ее хватает на дальнейшую обработку

в чем это выражается? Дамп?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Вт, авг 25 2009, 17:36 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, окт 03 2008, 17:20
Сообщения: 162
Не исключено, что память отводится для статических переменных. Возможно даже и не этого класса. И простое FREE их никак не очистит.
P.S. Что-то меня смущает, что стандартный класс ОЧЕНЬ много памяти "отжирает". :? Хотя бывают и такие случаи. :).
А что за класс такой: его название, функция?

_________________
В SAPе есть всё, просто вы чего-то не нашли.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Вт, авг 25 2009, 20:01 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
R256 написал:
В конце кода ФМ пишу FREE <объект1> и FREE <объект2>, объекты вроде как чистятся, но всякие ссылочные от них объекты так и остаются висеть в памяти.

Добавьте CLEAR: <объект1>, <объект2>.

_________________
С уважением,
Удав.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Вт, авг 25 2009, 20:11 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 08:36
Сообщения: 182
Откуда: Russia
Пол: Мужской
Если про саму задачу, то смысл такой:
Есть BWный BEx запрос. Все бы хорошо было и в Excele, но требуется выводить в отчет куда-нибудь очень большие объемы, например текстовый выгружаемый файл занимает место до 1 гига на винте, а его еще собственно сформировать надо(не говорите только, что такие отчеты никому не нужны будут - сам знаю, но отчетность есть отчетность, ее еще возможно и печатать будут:) ). Excel отваливается сразу, так как количество строк уходит за миллион, поэтому ABAPом получаю данные, которые формируют саповский функионал и согласно собственной настройки формирую текстовый файл. Все работает имхо для таких объемов шустро, но памяти отъедается немерянно, и если параллельно кто-то так же ест память, то ее банально не хватает на серваке
Используются классы:
cl_rsr_request
cl_rsr_excel_grid


> в чем это выражается? Дамп?
угу, сначала все чужие процессы уходят в PRIV, так как памяти нет, а потом мой процесс валиться в дамп из-за нехватки памяти
дампы - крайние случаи - для самых больших отчетов за самые большие отчетные периоды, в целом на большинство отчетов хватает, но хочеться исключить и их


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Вт, авг 25 2009, 20:23 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 08:36
Сообщения: 182
Откуда: Russia
Пол: Мужской
Art386 написал:
Может, попробовать вызвать сборщик мусора? Правда, не уверен, как это поможет
cl_tpda_ctrl_handler=>start_gc( ).


Ругается:
"Ошибка при взаимодействии процессов. Работа отладчика будет завершена."
и после этого отваливается

_________________
С Уважением Серега


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Вт, авг 25 2009, 21:28 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
R256 написал:
Вызываются всякие разные методы в результате чего формируем внутреннюю таблицу, которая возвращается в вызываемую программу для дальнейшей обработки.

А вам случайно FREE не на таблицу делать надо? :?

_________________
"One of the symptoms of an approaching nervous breakdown is the belief that one's work is terribly important." Bertrand Russell


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

Зарегистрирован:
Чт, авг 19 2004, 08:36
Сообщения: 182
Откуда: Russia
Пол: Мужской
Jelena написала:
А вам случайно FREE не на таблицу делать надо? :?


FREE на какую таблицу делать? на свою? я ее делаю специально для последующего перелопачивания...

вообщем получается, что моя внутренняя таблица весит к примеру 500 мегов, а всего занято памяти в 4 раза больше, т.е. уже 2 гига.

_________________
С Уважением Серега


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Вт, сен 01 2009, 14:25 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Пт, ноя 25 2005, 15:06
Сообщения: 143
Если у объекта есть метод free, попробуй еще так:
Code:
CALL METHOD <объект1>->free.

Иногда помогает)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Чт, сен 03 2009, 11:41 
Ассистент
Ассистент

Зарегистрирован:
Ср, дек 19 2007, 09:07
Сообщения: 31
R256 написал:
вообщем получается, что моя внутренняя таблица весит к примеру 500 мегов, а всего занято памяти в 4 раза больше, т.е. уже 2 гига.

Вы уверены, что именно Ваша программа занимает 2 ГБ? Если сервер приложений запущен под 32-разрядной ОС, 2 ГБ выделяется на все ABAP-программы этого сервера приложений. Есть некоторые нюансы, но для простоты их можно опустить. Если Вам нужен такой большой объем, попробуйте использовать EXTRACT-набор, вместо таблицы. Ему в памяти достаточно хранить только раздел HEADER (поля по которым будет производиться сортировка/группировка).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Чт, сен 03 2009, 17:39 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 08:36
Сообщения: 182
Откуда: Russia
Пол: Мужской
Wizard написал(а):
Вы уверены, что именно Ваша программа занимает 2 ГБ?

Да, я уверен в этом

Wizard написал(а):
Если сервер приложений запущен под 32-разрядной ОС, 2 ГБ выделяется на все ABAP-программы этого сервера приложений. Есть некоторые нюансы, но для простоты их можно опустить.

на все ABAP программы у нас выделено 11ГБ оперативки

2ГБ это цветочки :) при худших раскладах отъедается до 5ГБ памяти

почти все чистится после:
CALL METHOD r_request->if_rsbolap_object~free.
CALL METHOD cl_rsdm_read_master_data=>free_txt_n.

_________________
С Уважением Серега


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Чистка памяти после выполнения кода
СообщениеДобавлено: Чт, сен 03 2009, 17:41 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 08:36
Сообщения: 182
Откуда: Russia
Пол: Мужской
PS. объем используемой памяти можно посмотреть как через SM04, так и выводить в логи во время выполнения :

DATA: size TYPE abap_msize.

CALL METHOD cl_abap_memory_utilities=>get_total_used_size
IMPORTING
SIZE = size.

_________________
С Уважением Серега


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

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


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

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


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

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