内存未解除分配 - PyQt4

时间:2011-03-17 16:19:43

标签: python qt garbage-collection pyqt4

它可能是绑定(SIP)甚至python,但我有Qt(pyqt4)的问题。

我有一个QTabWidget,在里面我放了一个可以关闭的小部件。

我有一个小部件,可以分配大约400mb的内存。我没有设置父级,我在关闭时调用deleteLater()但没有任何反应。即使调用python的gc也行不通:

import gc
gc.collect()

现在,在不使用deleteLater()的情况下从QTabWidget关闭小部件时,会分配越来越多的内存。所以假设我打开内存繁重小部件的4个选项卡,我使用大约1.6GB的内存。如果我关闭它们并打开一个新的,我现在可以使用2GB的内存。

如果我使用deleteLater(),关闭4个标签后,我不会打开2GB,然后我必须打开5个标签。但是,这里是问题,即使所有小部件都已关闭,仍然会为进程(python)分配1.6GB,并且已调用deleteLater

由于

1 个答案:

答案 0 :(得分:3)

我有这个 - 在某个地方你有一个对你的小部件的引用,并且该引用已被计算...删除该小部件的唯一方法是确保没有剩余的引用,因此python可以垃圾收集它。

至少你最终没有像C ++这样悬挂的引用,这可能导致一些令人讨厌的崩溃......


这实际上很有用 - 如果您创建一个具有其成员的类级别列表的类,您可以回收旧对象并且永远不会将它们垃圾回收