Память не освобождена - PyQt4 - PullRequest
3 голосов
/ 17 марта 2011

Это могут быть привязки (SIP) или даже python, но у меня есть проблема с Qt (pyqt4).

У меня есть QTabWidget, и внутри него я помещаю виджеты, которые можно закрыть.

У меня есть виджет, который выделяет около 400 МБ памяти.Я не установил родителя, и я звоню deleteLater() при закрытии, но ничего не происходит.Даже вызов gc питона не работает:

import gc
gc.collect()

Теперь при закрытии виджетов из QTabWidget без использования deleteLater() выделяется все больше и больше памяти.Допустим, я открываю 4 вкладки виджета с большим объемом памяти, я использую около 1,6 ГБ памяти.Если я закрою их все и открою новую, у меня будет до 2 ГБ памяти.

Если я использую deleteLater(), после закрытия 4 вкладок я не перехожу до 2 ГБ, открываяновый, то я должен открыть 5 вкладок.Но, и вот проблема 1014 *, 1,6 ГБ все еще выделяется для процесса (python), даже если все виджеты закрыты, и deleteLater был вызван.

Спасибо

1 Ответ

3 голосов
/ 17 марта 2011

У меня было это - где-то у вас есть ссылка на ваш виджет, и эта ссылка была подсчитана ... единственный способ удалить этот виджет - убедиться, что нет оставшихся ссылок, чтобы python мог собрать его.

По крайней мере, вы не получите висячую ссылку вроде C ++, которая может привести к некоторым неприятным сбоям ...


Это может быть полезно - если вы создаетеКласс со списком его членов на уровне класса, вы можете перерабатывать старые объекты и никогда не иметь их сборщик мусора

...