Python pyqt:内存使用
我有一个程序,它创建了一个选项卡,每次我创建一个选项卡时,内存使用率都会上升,但当我关闭一个选项卡时,内存不会下降。我只是想知道,这正常吗?我能做些什么吗?以下是我关闭选项卡的代码:Python pyqt:内存使用,python,user-interface,pyqt,Python,User Interface,Pyqt,我有一个程序,它创建了一个选项卡,每次我创建一个选项卡时,内存使用率都会上升,但当我关闭一个选项卡时,内存不会下降。我只是想知道,这正常吗?我能做些什么吗?以下是我关闭选项卡的代码: def removeTab(self, index): text[index].deleteLater() del text[index] # text box # reorganize dict last = -1 for key in sorted(text): if last+
def removeTab(self, index):
text[index].deleteLater()
del text[index] # text box
# reorganize dict
last = -1
for key in sorted(text):
if last+1 != key:
text[key-1] = text[key]
del text[key]
last += 1
self.tab_widget.setCurrentIndex(index)
widget = self.tab_widget.currentWidget()
self.tab_widget.removeTab(index) # remove tab
widget.deleteLater()
del widget
好的,Google Plus上有人提出了一个建议 凯文·肯尼迪()建议
“.close()before.deleteLater()”在释放/删除时,由malloc或new分配的常规内存不会返回到系统。相反,它被应用程序保留并重新用于以后的分配。如果需要返回内存,那么应该考虑使用自定义分配器。您使用的是python。“Del”只删除对象引用,不释放内存。是垃圾收集器负责内存释放(好吧,你不能控制它) 如果在其他地方保留对对象的引用,也会发生同样的情况。简而言之:
目前,问题中的示例代码似乎没有任何地方可以“隐藏”额外的引用。因此,如果“每次”创建一个选项卡时(如OP所说)内存使用量都会增加,那么问题一定在应用程序中的其他地方——或者更准确地说,问题可能在于如何创建对象,而不是它们是如何被删除的。我在Google Plus上发布了这篇文章,因为我希望看到答案。这听起来好像与垃圾收集有关;这是给你修的吗?我不明白为什么。deleteLater()似乎是多余的。@jdi我不是OP。我在Google Plus上分享了这个问题,因为我想找到OP的答案。我对PyQT的了解还不够透彻,无法亲自为OP提供答案。“Google+不再适用于消费者(个人)和品牌帐户”我花了相当多的时间调试我似乎存在的内存泄漏问题。在我删除了一个嵌套很深的小部件中的lambda和partial之后,这个问题就消失了。