Проверка использования памяти Qt - PullRequest
0 голосов
/ 27 марта 2020

Я работаю над устаревшим приложением, написанным на Qt 4.8 (C ++). После внесения изменений я провел несколько стресс-тестов. Я беспокоюсь за их результаты. Вот мои выводы:

  • Без стресс-тестов параметр RssAnon (я работаю над Linux) увеличивается по времени
  • С стресс-тестами RssAnon увеличивается быстрее (между 10:05 и 10:20)

RssAnon statistics (from /proc/*/status)

Я приложил много усилий, чтобы избежать использования памяти Dynami c, однако я знаю, что за сценой Qt часто его использует. Я подозреваю, что вызывающий сигнал / слот механизм вызывает это быстрое увеличение. Во время тестов я передаю ссылку на объект stati c между потоками и помещаю его в QAbstractTableModel на основе C -массивов. Конечно, я вызываю begin / endInsert / RemoveRows при каждом изменении.

Мой вопрос: есть ли более надежный способ проверить, нет ли проблем с долговременной памятью? Я использовал valgrind, но он не показывает проблем с проверенным кодом. Кроме того, это может быть неправильный инструмент - все может быть освобождено при выходе, но я хочу избежать постоянного увеличения памяти во время выполнения. Может мне стоит проверить другой параметр из procfs?

1 Ответ

0 голосов
/ 30 марта 2020

Тем временем я использовал массив для мониторинга использования памяти - это правильный инструмент. Я обнаружил, что методы begin / endInsert / RemoveRows вызывают такое огромное потребление памяти в следующих местах:

  • QAccessible :: queryAccessibleInterace
  • QHashData :: allocateNode

По вопросу, ответ - Массив - и для просмотра результатов Массив-визуализатор .

Чтобы устранить эту «утечку», мне пришлось удалить функции beginInsertRows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...