Здравствуйте, гость ( Вход | Регистрация )
ksth | Дата 18.2.2011, 14:39 |
Не уверен что поможет, но можно перед вызовом QScriptEngine::evaluate() делать pushContext (), а после popContext(). Насколько я понимаю данные имеют локальный характер, и возможно они увеличивают GlobalObject. | |
DEADHUNT | Дата 6.9.2010, 22:50 |
да это утечки Qt, тоже их замечал. | |
igor_bogomolov | Дата 6.9.2010, 22:45 |
и это спокоен? запусти с флагом --leak-check=full Запускал так. Цитата valgrind --leak-check=full --track-origins=yes --show-reachable=yes --log-file=1.txt ./script Файл с выводом здесь. Я не увидел там ничего криминального. Эти цифры постоянны и не зависят от того какое количество раз скрипт будет выполнен.Да и поторопился я с предыдущим ответом. После n повторений, память расти перестает |
|
DEADHUNT | Дата 6.9.2010, 22:21 |
и это спокоен? запусти с флагом --leak-check=full |
|
Алексей1153 | Дата 6.9.2010, 22:21 |
igor_bogomolov, как "быстрый костыль" можно попробовать засунуть сиё в отдельный процесс (если логика приложения позволяет). А ещё - может быть, есть какой-нибудь метод для очистки памяти именно в объекте scriptEngine - его вызывать периодически. В конце концов, как костыль сойдёт, наверное, периодическое пересоздание объекта scriptEngine через new (со всеми синхронизациями, естественно, если это нужно) По крайней мере, это всё можно попробовать для убедиться, что дело именно в этом месте |
|
igor_bogomolov | Дата 6.9.2010, 22:07 |
Переделал немного таким образом Раскрывающийся текст
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 утечки прекращаются. |
|
BRE | Дата 6.9.2010, 20:45 |
BRE, спасибо, сейчас попробую. А какоя у вас версия Qt? $ qmake-qt4 --version QMake version 2.01a Using Qt version 4.6.3 in /usr/lib64 |
|
igor_bogomolov | Дата 6.9.2010, 20:42 |
а с какой строчки кода именно начинает появляться проблема ?
BRE, спасибо, сейчас попробую. А какоя у вас версия Qt? |
|
BRE | Дата 6.9.2010, 20:38 |
igor_bogomolov, проверь у себя этот код:
Судя по выводу valgrind у меня ничего не течет. |
|
Алексей1153 | Дата 6.9.2010, 19:43 |
igor_bogomolov, а с какой строчки кода именно начинает появляться проблема ? (можно определить половинным заремариванием функции) | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 18.4.2024, 3:09 |