|
|
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
Добрый день, коллеги! Есть ПБ 10.2.1 9597+PFC и Windows Xp. Приложение оформлено в ехе+dll. Странный эффект наблюдался при работе программы со стороны Диспетчера задач(Task manager). При открытии дополнительных окон память потребляется все больше и больше, при закрытии этих же окон размер памяти остается тем же максимально постоянным как и при всех открытых окнах. Если же снова начать открывать окна по новой то начинает расти предыдущий максимум(все открытые окна) и так до какого то предела, когда возникает эксептион по памяти. То есть в наличии монотонный рост зависящий от количества подходов. Аналогичная картина при работе не с ехе приложением а самим ПБ в дизайн режиме-но рост не такой быстрый. Методы работы стандартные, все создания объектов заканчиваются их destroy. Стандартные объекты управляются самим ПБ. Вопрос-как с этим бороться! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 13:30 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
sboykoВопрос-как с этим бороться! Вполне возможно, что это на совести программистов из Sybase. Соответственно как бороться - только walk around. Как найти - локализовать место где возникает утечка памяти (например при открытии конкретного окна) и постепенно комментарить скрипты, смотря когда эффект пропадет и соотв. - понять причину и попытаться переписать код. Когда-то таким образом нашел что в 9.0.2 7554 (а может и еще где) при вызове глобальной функции (возможно с аргументом типа any???) при каждом вызове утекало по несколько КБ памяти... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:08 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
Спасибо Марк! Но утекают не кб а целое окно. При его закрытии память не высвобождается(или остается фрагментированной). Вопрос-как закрыть окно, чтобы ПОЛНОСТЬЮ собрать мусор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:11 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
Утечки памяти вообще характерная вещь в PB, причем как ни странно память утекает при CREATE - DESTROY объекта, при работе с массивами, строками. Общих советов дать не могу, нужно в первую очередь найти у вас объект который и вызывает данную проблему. Плюс проверить а действительно ли вызывается DESTROY или НеверьГлазамСвоим, как однажды оказалось что метод DESTROY визуального объекта не вызывается при закрытии окна на котором оно лежало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:13 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
sboykoНо утекают не кб а целое окно. Фраза не понятна. sboykoПри его закрытии память не высвобождается(или остается фрагментированной). Если она освобождается, то она освобождается. Наличие фрагментации может только препятствовать выделению большого куска памяти, но на общий объем свободной памяти никак не влияет. Попробуйте по закрытию вызвать GarbageCollect () Хотя если это утечки внутри PBVM, то это не поможет. А иногда просто приводит к падению PB :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:16 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
Локшин МаркПопробуйте по закрытию вызвать GarbageCollect () Мне по крайней мере на PB6 это не помогало :( Где то помогло исключение из цикла Create/Destroy NVO и написание функции инициализации, очищающей переменные для нового использования, где то использование глобального массива вместо локального, в одном месте в DLL-ке на CPP я забыл сделать DEALLOCATE структуры. 2 sboyko Более точный совет можно дать только если знать что лежит на данном окне. Если DW закомментарить Retrieve если создаются NVO закомментарить их использование, если есть внешние функции временно их отключить. И проверять. sboykoПриложение оформлено в ехе+dll . А вот над этим я бы подумал еще раз и сделал наоборот ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:31 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
2Марк А в какой момент (какое событие окна) можно выдать garbage collect? Ведь событие destroy не видно среди событий окна. Если только руками в edit source? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:33 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
Я не знаю какой сейчас 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 представляется довольно таки бессмысленным занятием. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:40 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
а поиск по прежнему рулит? http://www.sql.ru/forum/actualtopics.aspx?search=heap+manager&submit=%CD%E0%E9%F2%E8&bid=39 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:42 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
2Зорин Task Manager только показывает что болезнь есть, а где она 1.в самом ПБ 2.в его виртуальной машине 3.в приложении наконец Ясно что с 1-2 ничего не сделать или мало что. Что делать если в 3 пункте? Ведь события create/destroy не видны в отладчике а именно там надо отследить возврат памяти хоть кому нибудь. Чем можно увидеть что вернулось стоолько то, размещено столько то? И объемы захвата/возврата? вот в чем вопрос! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:48 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
2Зорин Поиск помогает, но не очень. Статьи есть-рецептов нет. Если бы я хотел на этом уровне работать, то использовал бы Visual C или C Builder. Мне же нравится работать в ПБ, а дампы памяти с блаженной памяти ЕС1020 не люблю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:02 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
Обнаружил в отладчике что закрытое окно все еще висит в Objects in memory. И не никуда не делось. Как проверить исполнение ONDESTROY события? Ведь туда отладчик не заходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:16 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
ЗоринАндрей.е. если PB чего захапал то он не дурак при первой возможности отдавать это операционке чтоб потом опять за каждый килобайт с ней бодаться посему наблюдение за приложением из Task Manager представляется довольно таки бессмысленным занятием sboykoЕсли же снова начать открывать окна по новой то начинает расти предыдущий максимум(все открытые окна) и так до какого то предела, когда возникает эксептион по памяти. sboykoА в какой момент (какое событие окна) можно выдать garbage collect Например... при открытии окна. Есть еще такая функция GarbageCollectSetTimeLimit ()... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:30 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
У нас возникали похожие проблемы с памятью при переходе в 5-й на 6.5 версию. Т.к. пользуемся PFC то банально прописали в close окна вызов GarbageCollect () ... об это вобщем то уже сказали, я лишь скажу что нам помогло и так до сих пор код этот там и остался. Сейчас уже на 10.5 полет нормальный, жалоб на лики памяти не наблюдаем (так явно точно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 20:15 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
sboyko2Зорин Поиск помогает, но не очень. Статьи есть-рецептов нет. Если бы я хотел на этом уровне работать, то использовал бы Visual C или C Builder. Мне же нравится работать в ПБ, а дампы памяти с блаженной памяти ЕС1020 не люблю. Между прочим, Глобально помогает 1) переустановка ХРюши по-холодному( с CD, начиная с format x:\); 2) переход на Windows SERVER 2003 R2 (Release 2). Проверено многократно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 05:55 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
А AutoInstantiate вместо CREATE не помогает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 11:32 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
2Riska Используется ПФЦ, а как уж там сделано-слишком много переделывать бы пришлось. По поводу перехода на сервер2003-это ведь если есть сервная часть-многие хотят чтобы программа работала с аксесс на Виндовс ХП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 13:01 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
PavelBuilderGarbageCollect () ... до сих пор код этот там и остался. Сейчас уже на 10.5 полет нормальный, жалоб на лики памяти не наблюдаем (так явно точно) А как 10.5 переваривает GarbageCollect? У нас почему-то сразу сваливается на вызове этой процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 07:20 |
|
||
|
Работа с памятью
|
|||
|---|---|---|---|
|
#18+
tiger_sc PavelBuilderGarbageCollect () ... до сих пор код этот там и остался. Сейчас уже на 10.5 полет нормальный, жалоб на лики памяти не наблюдаем (так явно точно) А как 10.5 переваривает GarbageCollect? У нас почему-то сразу сваливается на вызове этой процедуры. Тоже самое. Пришлось отовсюду ликвидировать. Простым поиском. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2007, 13:11 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=34114223&tid=1337239]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 158ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...