Поиск утечек

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Поиск утечек

Сообщение SLIM » 14.06.2010 (Пн) 19:08

Подскажите, как выловить утечки памяти в приложении.
Ситуация странная.
Приложение загружается, съедая примерно 7,5 метров. Далее расход памяти практически не меняется.
Если окно свернуть, расход резко сокращается до 0,3, но это не самое странное. Если окно опять развернуть, расход увеличивается примерно до 2 Мб и остается примерно таковым всегда.

Приложение многопоточное. Один поток - основной поток процесса, второй запрашивает кое-что из БД и заливает это в список. Этот самый второй поток выполняется по таймеру раз за определенный промежуток времени. Вроде бы все что нужно я подчищаю, утечки не должно быть. Но объяснение этому должно быть точно.

Есть советы?
Пишите жизнь на чистовик.....переписать не удастся.....

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Поиск утечек

Сообщение FireFenix » 14.06.2010 (Пн) 21:24

Профайлер

как в других ЯП - не знаю, но в .НЕТ можно вести лог GC.GetTotalMemory (в файл, консоль, етк), скажем в конце каждой функи или до и после выгрузки ресурсов, формы, контролов...
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Поиск утечек

Сообщение VVitafresh » 15.06.2010 (Вт) 11:19

SLIM, честно говоря не понял что тебя смущает.
То что при сворачивании уменьшается "расход памяти"? Или приложение при работе требует все больше и больше ОЗУ?
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Поиск утечек

Сообщение SLIM » 15.06.2010 (Вт) 21:45

VVitafresh писал(а):SLIM, честно говоря не понял что тебя смущает.
То что при сворачивании уменьшается "расход памяти"? Или приложение при работе требует все больше и больше ОЗУ?

Все больше и больше как раз не трубует.
Я же говорю.
1. Запускаешь - 7,5 Мб - это нормально
2. Сворачиваешь - 0,3 Мб - это нормально
3. Разворачиваешь - 2 Мб - уже странно, но еще не запустился второй поток.
4. После того как начинается второй поток - 4 Мб и до 7,5 не растет.

Куда делись 3 с лишним Мб, которые были при первом запуске?
Пишите жизнь на чистовик.....переписать не удастся.....

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Поиск утечек

Сообщение FireFenix » 15.06.2010 (Вт) 22:09

Ну у тебя не утечка.... я бы сказал - не хватка :)

Могу предположить что GC изначально при загрузки выделил некоторое место под прогу
После сворачивания все контролы или объекты были почищены , и в том числе изменение размера выделяемых ресурсов памяти
После разворачивания и загрузки ресурсов GC опять переопределил нужное количество памяти для работы проги

Т.е. идея в том, что GC изначально выделил много места для работы, а потом в ходе работы - сократил до нужного или приемлемого размера
(only for .NET)
Последний раз редактировалось FireFenix 15.06.2010 (Вт) 22:18, всего редактировалось 1 раз.
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Поиск утечек

Сообщение Хакер » 15.06.2010 (Вт) 22:12

Какой GC? Не все люди, FireFenix, пишут на VB.NET или С#.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Поиск утечек

Сообщение FireFenix » 15.06.2010 (Вт) 22:17

Хакер писал(а):Какой GC? Не все люди, FireFenix, пишут на VB.NET или С#.

:facepalm:

Автор не указал, какой ЯП использует.. я автоматом по .НЕТ судил :roll:
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Поиск утечек

Сообщение SLIM » 15.06.2010 (Вт) 22:43

К счастью я пишу не на нем, ибо если NET творит вот это
FireFenix писал(а):Т.е. идея в том, что GC изначально выделил много места для работы, а потом в ходе работы - сократил до нужного или приемлемого размера

То это адская технология.

В данном вопросе не так важно по моему на чем я пишу. Скажу лишь что я использую практически только API.
Пишите жизнь на чистовик.....переписать не удастся.....

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: Поиск утечек

Сообщение FireFenix » 15.06.2010 (Вт) 23:08

Ну тогда нада смотреть в код...
Наверняка выгружаешь нужные и ненужные ресурсы
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

Dmitriy2003
Постоялец
Постоялец
 
Сообщения: 690
Зарегистрирован: 27.05.2003 (Вт) 22:47
Откуда: Deutschland

Re: Поиск утечек

Сообщение Dmitriy2003 » 15.06.2010 (Вт) 23:18

SLIM писал(а):Куда делись 3 с лишним Мб, которые были при первом запуске?

SysInternals suite -> vmmap -> может наведет тебя на правильный путь. :)

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Поиск утечек

Сообщение Joo » 16.06.2010 (Ср) 5:38

SLIM писал(а):К счастью я пишу не на нем, ибо если NET творит вот это
FireFenix писал(а):Т.е. идея в том, что GC изначально выделил много места для работы, а потом в ходе работы - сократил до нужного или приемлемого размера

То это адская технология.

В данном вопросе не так важно по моему на чем я пишу. Скажу лишь что я использую практически только API.


GC не выделил, а зарезервировал память, "приблизительно", и готов отдать её по первому требованию системы, хотя есть у меня прграммка на .NET (часики) так они используют всего ~365Kb, просто нужно вежливо попросить отдать зарезервированную память.
http://www.codelife.ru/net/203/
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: Поиск утечек

Сообщение Twister » 16.06.2010 (Ср) 7:21

SLIM

Сто лет назад на этом форуме tyomitch описавыл, почему так происходит. Не знаю, можно ли сейчас найти те посты, но самому-то проэкспериментировать можно?

Открываем ProcessExplorer, выделяем подопытный gui-процесс, вызываем контекстное меню, давим Properties и идем на вкладку Performance. Нас интересуют две группы - Virtual Memory и Phisycal Memory. Теперь начинай сворачивать и разворачивать окно своего приложения.

Что ты видишь? На какие мысли это наводит? ;)
А я все практикую лечение травами...

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Поиск утечек

Сообщение VVitafresh » 16.06.2010 (Ср) 10:36

+1
Можно и в стандартном таскменеджере добавить колонку VM Size (объем виртуальной памяти) и поиграться сворачиванием-разворачиванием.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Re: Поиск утечек

Сообщение SLIM » 22.08.2010 (Вс) 22:11

Вернулся к проекту, поэтому необходимо поднять топик.
Значит память.
Расходуется по полной. Так как в цикле выполнялось обновление списка ListView в отдельной функции, то я решил искать проблему там.
Постепенно сужая круг поиска я дошел до того момента, что расход памяти растет при добавлении элементов в ListView
SendMessage(hList, LVM_INSERTITEM, 0, (LPARAM)&lv_Item_list);
или
SendMessage(hList, LVM_SETITEM, 0, (LPARAM)&lv_Item_list);
Закомментив эти строки - все вроде нормально.
Перед тем как что-то добавлять я шлю LVM_DELETEALLITEMS, но такое ощущение что в список только добавляются строки, но не удаляются, хотя визуально видно обратное.

Что же это может быть?
Пишите жизнь на чистовик.....переписать не удастся.....


Вернуться в Народный треп

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

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

    TopList  
cron