0

我现在正在开发一个使用 PyQt5 和 CFFI 绑定到 libgphoto2 的 Python 应用程序。

我有这部分代码,它将每 1/60 秒轮询一次相机以获取预览图像,然后安排在屏幕上绘制它。

def showPreview(self):
    # Do we have a camera loaded at the moment?
    if self.camera:
        try:
            # get data from the camera & turn it into a pixmap
            self.__buffer = self.camera.getPreview().scaled(self.size(), Qt.KeepAspectRatio) # Scale it

            # Schedule a redraw
            self.update()

            # Setup another show preview in 1/60 of a second
            QTimer.singleShot(1000 // 60, self.showPreview)
        except GPhoto2Error as e:
            # Ignore any errors from libgphoto2
            pass

getPreview()方法返回一个QImage类型。

当我使用连接到我的应用程序的相机运行此程序时,我注意到我的系统的内存使用量不断增加。是的,我已经运行了大约 10 分钟。它开始时的使用率为 0.5%,现在已接近 20%。

如果我错了,请纠正我,但 Python 的 GC 不应该启动并摆脱旧QImage对象。我怀疑他们逗留的时间超过了应有的时间。

4

1 回答 1

0

如果有帮助,我在使用 QImage 和 QPixmap 的应用程序上遇到了类似的内存泄漏。每次上传图片时,内存都会以 2% 的速度增长。通过使用 QPixmap.scaled (...., Qt.FastTransformation) 我在每张图像上实现了 0.2% 的增长。问题仍然存在,但小了 10 倍。我的代码中没有其他任何更改。所以肯定和QImage/QPixmap的析构函数有关。

于 2019-07-16T08:55:14.697 回答