内存未释放 - PyQt4
可能是绑定的问题(SIP)或者是Python本身的问题,但我在使用Qt(pyqt4)时遇到了麻烦。
我有一个QTabWidget,在里面放了一些可以关闭的控件。
其中有一个控件大约占用400MB的内存。我没有设置父控件,并且在关闭时调用了deleteLater()
,但没有任何反应。即使调用Python的垃圾回收(gc)也没用:
import gc gc.collect()
现在,当我在QTabWidget中关闭这些控件而不使用deleteLater()
时,内存使用量越来越多。比如说我打开4个占用内存较大的标签页,这样我大约会使用1.6GB的内存。如果我把它们都关掉,然后再打开一个新的,内存使用量就变成了2GB。
如果我使用deleteLater()
,在关闭这4个标签页后,再打开一个新的,就不会到2GB,而是需要打开5个标签页。但这里有一个问题,即使所有控件都关闭了,并且调用了deleteLater
,进程(Python)仍然占用着1.6GB的内存。
谢谢
1 个回答
2
我之前遇到过这样的情况——你有一个小部件的引用,这个引用是被计数的……要删除这个小部件,唯一的方法就是确保没有其他地方再引用它,这样Python才能把它清理掉。
至少你不会像在C++中那样遇到悬空引用的问题,这样可能会导致一些很糟糕的崩溃……
其实这也可以很有用——如果你创建一个类,并在这个类里有一个成员的列表,你就可以重复使用旧的对象,而不让它们被清理掉。