|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
Пишу новую прогу. C-шная часть (Opal.dll) управляется из VB6 через API по принципу SendMessage -> GetMessage -> (действия)-> FreeMessage либо OnGetMessage->(действия)-> FreeMessage Есть еще куча всяких "красот" в плане API-GDI в VB6 части приложения. Программа далеко еще не написана, но стал замечать следующее: Если оставить прогу загруженной на несколько часов, то начинаются "визуально видимые" тормоза. Т.е. нажимаешь например кнопку изменить настройки - графика тормозит страшно. Смотришь загрузку CPU -может быть 50% и больше. Пробовал отключать родной дебаг Opal (пишет много всего в текстовуху) - не помогает. Есть еще временный прибамбас: Код: vbnet 1. 2. 3.
(вывожу свой debug в тектовое поле, эта штука кстати переполняется и перестает делать вывод всего текста видимо когда длина текста превышает допустимую) Сейчас отключил, посмотрю что будет, может оно? Ну, графические объекты типа lngIcon вроде уничтожаю в процессе работы. (один раз с таким багом столкнулся, типа по таймеру заново генерируется иконка в память и отображается - без уничтожения - был эффект как сейчас). Т.е. как вообще отследить "утечку". Если виноват Opal (фиговую версию оприходовал), то я конечно вряд ли что смогу сделать. А если что-то в моем коде? Как вообще найти/искать слабое звено? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 15:31 |
|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
Например, сделать максимально облегченный вариант своей проги — только алгоритм работы с этой библиотекой. Можно даже (действия) убрать. Если утечки останутся — виноват либо сам опал либо алгоритм работы с ним. Но почти наверняка утечка в красотах. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2012, 15:37 |
|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
Не знаю, сегодня на ночь оставлял, утром ничего не тормозило. Но какое-то "ощущение" все же есть. AntonariyНо почти наверняка утечка в красотах. Понять бы где. Графика? "Прозрачность"? Так Код: vbnet 1.
-всего один,и создается единственный раз в Form_Load, уничтожается один раз в конце. С иконками тоже вроде все в порядке. Любое рисование на hdc врядли приведет к утечкам. Интересно, а при сабклассинге+customdraw Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
Exit Function делать надо? Цвет строчки меняется по любому. AntonariyЕсли утечки останутся — виноват либо сам опал. Телефония при этом не тормозит, тормозит вывод формы настроек, в форме настроек прибамбасов много но она выгружается при закрытии (т.е. не загружена основное время). Да ну, думаю надо забить и писать дальше, глядишь вылезет в процессе. Что интересно, случайные глюки возникают на XP, на кот. прога пишется и компилируется, а никак не на Висте или 7-ке. Причем ряд глюков явно связан с Opal (не тот кот. описал). Не пора уже от поддержки XP отказываться? Восьмерка какая-то уже вроде вышла. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 17:23 |
|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
Дмитрий77Понять бы где.Механизм понимания стандартный: последовательное отключение свистелок и перделок до исчезновения течи. Дмитрий77Не пора уже от поддержки XP отказываться?Не пора ли уже от VB6 отказываться? Фреймворк и красоты без пинков по почкам обеспечивает равно в XP и 7, и не течет при этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2012, 17:47 |
|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
Antonariy, от этих рассуждений задача не решится. Подозрение пало на "прозрачность" -почти уже уверен -по истечении времени тормозит именно перерисровка картинки фона (ну если топики мои читали), По сути я использую 2 кода: 1.где приемлимо WM_CTLCOLOR(XXX) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
2. Для ListView свой с PatBlt: Привожу полностью Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31.
Ничего явно дурного во втором коде нет? В первом коде как бы более уверен. Понятно, что перерисовка жрет какие-то ресурсы, но "хужее" то с течением времени быть не должно. hbshBackDigits -это brush фоновой картинки, создается один раз при запуске формы (в Load). Сейчас пока сделал app_UseBkPicture = false (без фоновой картинки) -ни один из кодов не работает -вроде не тормозит. Но это надо ждать долго и раз на раз не приходится. Если более менее буду уверен, то попробую отключить только ListView. Еще например не может быть, что ресурсы гробастаются "совершенно в другом месте", а на перерисовку как на "довольно жрущую операцию" их просто перестает хватать? Если прогу закрыть и запустить заново, то первое время все всегда хорошо, комп сам от этого не дохнет. От фоновой картинки главного окна (хотя б как от опции) отказываться не хочу, т.к. скины рисовать - не художник, а картинка (кот. user может задавать свою) и прозрачность делают вид сильно привлекательней (не я понимаю что это "перделки" и "свистелки", а что делать, на перделки и формы с настройками параметров мое основное время и уходит, а телефонию светлые умы за меня уже написали - Opal именно для этого, хотя и там под себя все допиливать надо, но допиливать не строить с нуля). Antonariy, причем тут Net? Чтобы делать то же самое в net понадобятся те же API. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2012, 20:17 |
|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
2. Здесь есть утечка. При использовании GetDC после окончания действий нужно использовать ReleaseDC. Дмитрий77Antonariy, причем тут Net? Чтобы делать то же самое в net понадобятся те же API.Я почти уверен, тоже самое в Net делается на объектном уровне. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2012, 20:25 |
|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
Antonariy2. Здесь есть утечка. При использовании GetDC после окончания действий нужно использовать ReleaseDC. Ну, думаю ты прав. Спасибо. А сильная утечка, как считаешь? Листвью как бы "маленький", но те несколько строк что он содержит, обновляются в среднем раз в минуту (если даже окно не дергать). Сделал так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Посмотрю получился ли эффект. Первый код я аккуратно передрал когда-то с C++ (насилу нашел). А второй код сделан самостоятельно из первого глядя на еще чего-то, вот видимо на радостях что получилось и упустил про ReleaseDC. Дмитрий77Я почти уверен, тоже самое в Net делается на объектном уровне. Я ж сам понимаешь и на нетовские коды натыкаюсь пока чего-нибудь ищу. Как object.property=What_I_need эти вещи там точно не делаются. Какие-нибудь заумные события (по сути тот же WinProc)-с кодом пародирующим те же API это да, м.б. и можно. Преимущество в чем? Что Release-Delete-Kill делаются автоматически на уровне обертки и что ставишь точку, а оно тебе варианты свойств, ф-ций и т.п. автовыдает? Но по поводу перехода. Я ж хотел. Но чего-то передумал пока. Меня интересует Opal, я практически параллельно разобрался с Net-оберткой (чужой, но допиливал) и тут же сделал "обертку" на VB6 (3 года назад не получилось, а сейчас видимо дорос). Последний факт как бы добил выбор в пользу пока что VB6. Хочется написать прогу побыстрее, и я знаю что смогу, а с Net разбираться-ковыряться. С каждой "перделкой" с нуля и еще с ним целиком в целом (+ язык учить если C# а не vb.net). На VB6 то с "перделками" рука набита пусть и через API. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 02:28 |
|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
Дмитрий77 А сильная утечка, как считаешь?Ну, это опять же тебе мерить. Могу лишь сказать, что открытые и не закрытые дескрипторы являются обычной причиной утечек. Еще есть такая функция, может найдутся места, где имеет смысл ее воткнуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 03:02 |
|
Как отследить утечку памяти / загрузку CPU
|
|||
---|---|---|---|
#18+
AntonariyЕще есть такая функция, может найдутся места, где имеет смысл ее воткнуть. В моих старых кодах такие штуки могут местами отсутствовать. А сейчас я в общем и целом за этим слежу. Но как выяснилось не без ляпов. Короче твой совет помог, тесты показали что глюк исчез. Thanks. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2012, 15:30 |
|
|
start [/forum/topic.php?fid=60&msg=38038456&tid=2157318]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
36ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 295ms |
total: | 420ms |
0 / 0 |