CDialog и память
От: Druid_swamp  
Дата: 13.07.11 12:16
Оценка:
Добрый день.

При создании удалении диалога астет использование памяти.
Как побороть эту напасть?

Предыстория. Есть приложение должно работать 365 x 24.
При определенных действиях пользователя вывалиавает модальное окно с просьбой подождать.
Было замечено что растет "медленно но верно" память приложения, долго ковырял и наковырял.

Создал тестовое приложение MFC "Dialog based", в методе InitInstance создается и удаляется диалог


...
CDialog dlg;
DWORD dwStop = 0;
while(dwStop<1000000)
{
    dlg.Create(IDD_DIALOGTEST_DIALOG);
    Sleep(1);
    dlg.DestroyWindow();        
    dwStop++;
}
...


при этом память процесса так же растет.

Используется VS2005, WinXP, проэт собран в конфигурации Dynamic Unicode Release.
Re: CDialog и память
От: crea7or http://crea7or.spb.ru
Дата: 19.07.11 13:57
Оценка:
Здравствуйте, Druid_swamp, Вы писали:

D_>При создании удалении диалога астет использование памяти.

D_>Как побороть эту напасть?

Ресурсы из диалога освобождаются?
Как проверяешь что потребление растёт?
Re[2]: CDialog и память
От: VladFein США  
Дата: 19.07.11 15:57
Оценка:
Здравствуйте, crea7or, Вы писали:

C>Ресурсы из диалога освобождаются?

C>Как проверяешь что потребление растёт?

Я попробовал этот код, утекает 17.5 байтов на цикл. Некрасиво, конечно...
Ресурсы если и должны освобождаться то внутри CDialog.
Проверяю Private Bytes (Process Explorer).

Бороться, очевидно, нужно используя Show/Hide вместо Create/Destroy.
Re[3]: CDialog и память
От: crea7or http://crea7or.spb.ru
Дата: 19.07.11 18:11
Оценка:
Здравствуйте, VladFein, Вы писали:

VF>Я попробовал этот код, утекает 17.5 байтов на цикл. Некрасиво, конечно...

VF>Ресурсы если и должны освобождаться то внутри CDialog.
VF>Проверяю Private Bytes (Process Explorer).

PrivateBytes это ведь память процесса. Не факт что оно зависит от диалога.
Re[4]: CDialog и память
От: VladFein США  
Дата: 19.07.11 18:37
Оценка:
Здравствуйте, crea7or, Вы писали:

C>PrivateBytes это ведь память процесса. Не факт что оно зависит от диалога.


В каком смысле — не факт?
Остановки до и после цикла, вычисляю разницу, делю на количество итераций.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.