powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Работа с памятью
19 сообщений из 19, страница 1 из 1
Работа с памятью
    #34083442
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, коллеги!
Есть ПБ 10.2.1 9597+PFC и Windows Xp. Приложение оформлено в ехе+dll.
Странный эффект наблюдался при работе программы со стороны Диспетчера задач(Task manager). При открытии дополнительных окон память потребляется все больше и больше, при закрытии этих же окон размер памяти остается тем же максимально постоянным как и при всех открытых окнах. Если же снова начать открывать окна по новой то начинает расти предыдущий максимум(все открытые окна) и так до какого то предела, когда возникает эксептион по памяти. То есть в наличии монотонный рост зависящий от количества подходов. Аналогичная картина при работе не с ехе приложением а самим ПБ в дизайн режиме-но рост не такой быстрый.
Методы работы стандартные, все создания объектов заканчиваются их destroy. Стандартные объекты управляются самим ПБ.
Вопрос-как с этим бороться!
...
Рейтинг: 0 / 0
Работа с памятью
    #34083642
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoВопрос-как с этим бороться!
Вполне возможно, что это на совести программистов из Sybase. Соответственно как бороться - только walk around. Как найти - локализовать место где возникает утечка памяти (например при открытии конкретного окна) и постепенно комментарить скрипты, смотря когда эффект пропадет и соотв. - понять причину и попытаться переписать код. Когда-то таким образом нашел что в 9.0.2 7554 (а может и еще где) при вызове глобальной функции (возможно с аргументом типа any???) при каждом вызове утекало по несколько КБ памяти...
...
Рейтинг: 0 / 0
Работа с памятью
    #34083654
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Марк!
Но утекают не кб а целое окно. При его закрытии память не высвобождается(или остается фрагментированной). Вопрос-как закрыть окно, чтобы ПОЛНОСТЬЮ собрать мусор.
...
Рейтинг: 0 / 0
Работа с памятью
    #34083675
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Утечки памяти вообще характерная вещь в PB, причем как ни странно память утекает при CREATE - DESTROY объекта, при работе с массивами, строками. Общих советов дать не могу, нужно в первую очередь найти у вас объект который и вызывает данную проблему. Плюс проверить а действительно ли вызывается DESTROY или НеверьГлазамСвоим, как однажды оказалось что метод DESTROY визуального объекта не вызывается при закрытии окна на котором оно лежало.
...
Рейтинг: 0 / 0
Работа с памятью
    #34083690
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboykoНо утекают не кб а целое окно.
Фраза не понятна.
sboykoПри его закрытии память не высвобождается(или остается фрагментированной).
Если она освобождается, то она освобождается. Наличие фрагментации может только препятствовать выделению большого куска памяти, но на общий объем свободной памяти никак не влияет.
Попробуйте по закрытию вызвать GarbageCollect ()
Хотя если это утечки внутри PBVM, то это не поможет. А иногда просто приводит к падению PB :)
...
Рейтинг: 0 / 0
Работа с памятью
    #34083781
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркПопробуйте по закрытию вызвать GarbageCollect ()

Мне по крайней мере на PB6 это не помогало :(
Где то помогло исключение из цикла Create/Destroy NVO и написание функции инициализации, очищающей переменные для нового использования, где то использование глобального массива вместо локального, в одном месте в DLL-ке на CPP я забыл сделать DEALLOCATE структуры.

2 sboyko

Более точный совет можно дать только если знать что лежит на данном окне. Если DW закомментарить Retrieve если создаются NVO закомментарить их использование, если есть внешние функции временно их отключить. И проверять.

sboykoПриложение оформлено в ехе+dll .
А вот над этим я бы подумал еще раз и сделал наоборот ;)
...
Рейтинг: 0 / 0
Работа с памятью
    #34083792
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Марк
А в какой момент (какое событие окна) можно выдать garbage collect? Ведь событие destroy не видно среди событий окна. Если только руками в edit source?
...
Рейтинг: 0 / 0
Работа с памятью
    #34083827
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не знаю какой сейчас PB использует heap manager, но...
When blocks of memory are freed, the SybHeap manager does not return them to the operating system. Instead it maintains them in a free list for reuse. т.е. если PB чего захапал то он не дурак при первой возможности отдавать это операционке чтоб потом опять за каждый килобайт с ней бодаться
посему наблюдение за приложением из Task Manager представляется довольно таки бессмысленным занятием.
...
Рейтинг: 0 / 0
Работа с памятью
    #34083835
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Работа с памятью
    #34083868
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Зорин
Task Manager только показывает что болезнь есть, а где она
1.в самом ПБ
2.в его виртуальной машине
3.в приложении наконец
Ясно что с 1-2 ничего не сделать или мало что.
Что делать если в 3 пункте? Ведь события create/destroy не видны в отладчике а именно там надо отследить возврат памяти хоть кому нибудь. Чем можно увидеть что вернулось стоолько то, размещено столько то? И объемы захвата/возврата?
вот в чем вопрос!
...
Рейтинг: 0 / 0
Работа с памятью
    #34083952
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Зорин
Поиск помогает, но не очень. Статьи есть-рецептов нет. Если бы я хотел на этом уровне работать, то использовал бы Visual C или C Builder. Мне же нравится работать в ПБ, а дампы памяти с блаженной памяти ЕС1020 не люблю.
...
Рейтинг: 0 / 0
Работа с памятью
    #34084028
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обнаружил в отладчике что закрытое окно все еще висит в Objects in memory. И не никуда не делось. Как проверить исполнение ONDESTROY события? Ведь туда отладчик не заходит.
...
Рейтинг: 0 / 0
Работа с памятью
    #34084114
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗоринАндрей.е. если PB чего захапал то он не дурак при первой возможности отдавать это операционке чтоб потом опять за каждый килобайт с ней бодаться
посему наблюдение за приложением из Task Manager представляется довольно таки бессмысленным занятием
sboykoЕсли же снова начать открывать окна по новой то начинает расти предыдущий максимум(все открытые окна) и так до какого то предела, когда возникает эксептион по памяти.
sboykoА в какой момент (какое событие окна) можно выдать garbage collect
Например... при открытии окна.
Есть еще такая функция GarbageCollectSetTimeLimit ()...
...
Рейтинг: 0 / 0
Работа с памятью
    #34085187
PavelBuilder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас возникали похожие проблемы с памятью при переходе в 5-й на 6.5 версию. Т.к. пользуемся PFC то банально прописали в close окна вызов GarbageCollect () ... об это вобщем то уже сказали, я лишь скажу что нам помогло и так до сих пор код этот там и остался. Сейчас уже на 10.5 полет нормальный, жалоб на лики памяти не наблюдаем (так явно точно)
...
Рейтинг: 0 / 0
Работа с памятью
    #34114223
Фотография GrayCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sboyko2Зорин
Поиск помогает, но не очень. Статьи есть-рецептов нет. Если бы я хотел на этом уровне работать, то использовал бы Visual C или C Builder. Мне же нравится работать в ПБ, а дампы памяти с блаженной памяти ЕС1020 не люблю.
Между прочим, Глобально помогает
1) переустановка ХРюши по-холодному( с CD, начиная с format x:\);
2) переход на Windows SERVER 2003 R2 (Release 2).
Проверено многократно
...
Рейтинг: 0 / 0
Работа с памятью
    #34115057
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А AutoInstantiate вместо CREATE не помогает?
...
Рейтинг: 0 / 0
Работа с памятью
    #34115578
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Riska
Используется ПФЦ, а как уж там сделано-слишком много переделывать бы пришлось.
По поводу перехода на сервер2003-это ведь если есть сервная часть-многие хотят чтобы программа работала с аксесс на Виндовс ХП.
...
Рейтинг: 0 / 0
Работа с памятью
    #34448778
tiger_sc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PavelBuilderGarbageCollect () ... до сих пор код этот там и остался. Сейчас уже на 10.5 полет нормальный, жалоб на лики памяти не наблюдаем (так явно точно)

А как 10.5 переваривает GarbageCollect? У нас почему-то сразу сваливается на вызове этой процедуры.
...
Рейтинг: 0 / 0
Работа с памятью
    #34449781
sboyko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tiger_sc PavelBuilderGarbageCollect () ... до сих пор код этот там и остался. Сейчас уже на 10.5 полет нормальный, жалоб на лики памяти не наблюдаем (так явно точно)

А как 10.5 переваривает GarbageCollect? У нас почему-то сразу сваливается на вызове этой процедуры.
Тоже самое. Пришлось отовсюду ликвидировать. Простым поиском.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Работа с памятью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]