Текущее время: Чт, июл 31 2025, 01:11

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


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

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


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

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