pyqtgraph Plot关闭时内存未释放

时间:2016-08-23 07:21:20

标签: python pyqtgraph

我的Python QApplication有一个按钮(在主窗口上),当点击它时,会启动一个pyqtgraph Plot。下面的代码显示了如何在类中生成绘图。

self.win = pg.GraphicsWindow()
self.win.setWindowTitle(self.title)
self.p = self.win.addPlot()
self.curve = self.p.plot(self.Data1)

我注意到的一件事是,当我关闭应用程序中的绘图窗口时,内存不会被释放。因此,例如,在按下按钮之前,应用程序大约需要20Mb。单击按钮启动绘图后,此值将增加到25Mb。但是当我关闭绘图(通过单击右上角的x)时,应用程序内存占用量保持在25Mb。关闭绘图时是否有任何方法可以释放此5Mb内存(请注意,我有行self.curve.clear(),因此在实时更新绘图时没有泄漏。)

是否需要修改close()closeEvent()方法。或者以某种方式删除对象的引用(虽然不确定如何完成)。

非常感谢您的阅读!

1 个答案:

答案 0 :(得分:0)

有几件事。

  1. 关闭窗口并没有明确解除分配任何内容。是的,在内部,窗口结构不再使用,但这并不意味着GUI工具包丢弃它计算的所有内容是明智的 - 可能部分内容与下一个窗口相关呢?
  2. Python具有非确定性(从程序运行时的角度来看)垃圾收集,典型的。因此,不能保证丢失对象的最后一个引用会立即释放对象使用的内存
  3. 这可能是一种误解:脚本语言运行时不会立即free他们已经分配的内存并不会立即使用它的情况并不罕见 - 这将是一个可怕的策略,因为启发式,你很可能再次需要至少部分内容。而且严重的是,在运行Python GUI的机器上,5MB的内存(保留?映射?)并不是那么多,因此提前释放它们没有任何好处。这样做可能会被批评为糟糕的运行时设计。