Постоянно течет память при исполнении скрипта |
Здравствуйте, гость ( Вход | Регистрация )
Постоянно течет память при исполнении скрипта |
igor_bogomolov |
6.9.2010, 17:34
Сообщение
#1
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Непрерывно течет память при исполнении скрипта. Кто сталкивался с подобным? Может я что то не правильно делаю?
За пример можно взять следующий код
|
|
|
kwisp |
6.9.2010, 17:36
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
багтрекер троллей смотрел?
|
|
|
igor_bogomolov |
6.9.2010, 18:51
Сообщение
#3
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Смотрел, конечно. Есть там такой баг http://bugreports.qt.nokia.com/browse/QTBUG-6426
Просто предполагаю, что я не правильно что то делаю. Не один же я скриптами пользуюсь, но не у нас ни на прогорге подобных жалоб не нашёл. К тому же стандартный пример context2d работает нормально. Там правда хитро как то, да и для моей задачи вреде таких сложностей и не нужно. Остальные стандартные примеры QtScript так же подтекают. collectGarbage не помогает |
|
|
Алексей1153 |
6.9.2010, 19:43
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
igor_bogomolov, а с какой строчки кода именно начинает появляться проблема ? (можно определить половинным заремариванием функции)
|
|
|
BRE |
6.9.2010, 20:38
Сообщение
#5
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
igor_bogomolov, проверь у себя этот код:
Судя по выводу valgrind у меня ничего не течет. |
|
|
igor_bogomolov |
6.9.2010, 20:42
Сообщение
#6
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
|
|
|
BRE |
6.9.2010, 20:45
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
|
|
|
igor_bogomolov |
6.9.2010, 22:07
Сообщение
#8
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Переделал немного таким образом
Раскрывающийся текст
Valgrind можно сказать спокоен "вывод valgrind" Цитата ==13956== LEAK SUMMARY: ==13956== definitely lost: 124 bytes in 1 blocks ==13956== indirectly lost: 0 bytes in 0 blocks ==13956== possibly lost: 37,731 bytes in 530 blocks ==13956== still reachable: 135,512 bytes in 1,259 blocks ==13956== suppressed: 0 bytes in 0 blocks Я читал ваш комментарий по поводу диспетчера задач Цитата Память растет, потому что процесс запрашивает ее у ОС для своего хипа (кучи), но после освобождения памяти в хипе она не обязательно отдается системе обратно, а продолжает использоваться для аллокации внутри процесса. Поэтому, по диспетчеру и не видно ее освобождение. В общем, диспетчер плохой инструмент для отлова утечек памяти внутри процесса. Возможно диспетчер и плохой инструмент. Но память растёт непрерывно. За несколько дней начинает превышать 500 МБ и "планировщик" эту программу прибивает. Заказчик не доволен, т.к. программа должна работать непрерывно. Возможно утечки есть и в другом месте. Сбивает то, что если я комментирую scriptEngine->evaluate утечки прекращаются. |
|
|
Алексей1153 |
6.9.2010, 22:21
Сообщение
#9
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
igor_bogomolov, как "быстрый костыль" можно попробовать засунуть сиё в отдельный процесс (если логика приложения позволяет).
А ещё - может быть, есть какой-нибудь метод для очистки памяти именно в объекте scriptEngine - его вызывать периодически. В конце концов, как костыль сойдёт, наверное, периодическое пересоздание объекта scriptEngine через new (со всеми синхронизациями, естественно, если это нужно) По крайней мере, это всё можно попробовать для убедиться, что дело именно в этом месте Сообщение отредактировал Алексей1153 - 6.9.2010, 22:21 |
|
|
DEADHUNT |
6.9.2010, 22:21
Сообщение
#10
|
Активный участник Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: 2 |
и это спокоен? запусти с флагом --leak-check=full |
|
|
Текстовая версия | Сейчас: 28.12.2024, 7:23 |