我现在正在开发一个Python应用程序,它使用PyQt5和CFFI绑定到libgphoto2。
我有这段代码,它将每隔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
passgetPreview()方法返回一个QImage类型。
当我用连接到我的应用程序的摄像头运行这个程序时,我注意到我的系统的内存使用量一直在不断增加。好的,我已经运行了大约10分钟。它最初的使用率是0.5%,现在已经上升到近20%。
如果我错了,请纠正我,但是Python的GC不应该介入并删除旧的QImage对象吗?我怀疑他们逗留的时间比他们应有的时间要长。
发布于 2019-07-16 16:55:15
为了方便起见,我在一个使用QImage和QPixmap的应用程序中遇到了类似的内存泄漏。我每次上传一张图片,内存都会以2%的速度增加。通过使用QPixmap.scaled (...,Qt.FastTransformation),我实现了每个图像0.2%的增长。问题仍然存在,但小了10倍。在我的代码中没有任何其他的改变。所以它必须与QImage/QPixmap的析构函数相关。
https://stackoverflow.com/questions/44856945
复制相似问题