![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Letchik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 5.1.2010 Где: UGTB Репутация: нет Всего: нет |
Привет!
У меня к вам просьба! Объясните пожалуйста, почему после закрытия диалогового окна память не освобождается? Правда есть плюс, после повторного его открытия, память заново не выделяется. А вот очень важная проблема: в диалоговом окне есть массив из ImageList"ов. Создаю с помощью ImageList_Create(), а в обработчике WM_DESTROY удаляю их всех с помощью ImageList_Destroy. Однако память после них не освобождается. Мало того, с каждым открытием окна память под них только выделяется. Проверил, это именно ImageList! Количество выделяемой памяти наблюдаю в диспетчере задач. В чём дело? Чего я не знаю? |
|||
|
||||
| Alca |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 5 Всего: 50 |
Это сообщение отредактировал(а) Alca - 1.6.2010, 10:43 |
|||
|
||||
| Letchik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 5.1.2010 Где: UGTB Репутация: нет Всего: нет |
Вот уменьшённая версия кода. Вместо "some code" кое-какие строчки отвечающие за создание контролов, установка шрифтов и тому подобное. С этим проблем нет. Это сообщение отредактировал(а) Letchik - 1.6.2010, 18:32 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
IMHO тут проблема не в ImageList, а в Icon. В строке 14 создается 4 иконки, а в строке 20 удаляется только одна.
|
|||
|
||||
| Letchik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 5.1.2010 Где: UGTB Репутация: нет Всего: нет |
Я тоже так думал. Чтобы проверить, вставил DeleteObject(hIcon) в цикл. Проблема не решилась.
Потом убрал из цикла все строки кроме
Проблема повторилась. Затем убрал всю часть кода, которая отвечала за загрузку картинок, создание имиджлистов и тому подобное. Результат: память выделялась только при первом открытии диалогового окна. Вывод: дело в ImageList. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
если иконка не общая(LR_SHARED), ее нужно удалять с помощью DestroyIcon -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
менеджер памяти не охотно хочет уменьшать память кучи после уничтожения Image List с его содержимым.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
это не проблема кучи, физическое освобождение памяти происходит только при ее дефиците, иначе бы все операции с памятью требовали бы гораздо больше времени, так что в данном случае "невысвобождение памяти" - не показатель показатель - постоянный рост задействованных ресурсов, т.е. утечка (leak) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Letchik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 5.1.2010 Где: UGTB Репутация: нет Всего: нет |
Диагноз - утечка памяти.
Не пойму, откуда берутся целых 32кб???? И почему память не освобождается после закрытия окна???? Конечно, на практике это никак не отразится на производительности программы, особенно на современных компьютерах. Ведь для того, чтобы в памяти собрался лишний мегабайт мусора нужно открыть окошко 32 раза. Вряд ли такое случится, но тем не менее, мне очень не нравится, что моя прога страдает утечкой памяти... Неужели никто не сталкивался с данной проблемой??? |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
у меня та же самая проблема, память выделяется, но диспечер задач показывает как будто она не освободилась. При следующем создании ImageList, память не увеличивается - это не есть утечка памяти. Утечка это когда постоянно память будет увеличиваться.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Letchik |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 5.1.2010 Где: UGTB Репутация: нет Всего: нет |
А вот у меня увеличивается...
Покажи код |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Собственно только вот это
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |