我正在尝试实现与另一线程中请求的图像相邻的预加载图像,并将其存储在QPixmapCache中,但是即使我不存储图像,也似乎存在内存泄漏。
Valgrind用这种方法显示没有内存泄漏,但是即使我删除了将图像添加到QPixmapCache的代码,程序的内存也将超过500MB。如果将其添加到QPixmapCache,则内存使用量将超过1 GB。
我进行了测试,以确保正确删除了FutureWatcher,并且确实删除了deleteLater调用,内存泄漏的速度更快,并且valgrind可以检测到泄漏。
QFutureWatcher<QVImageAndFileInfo> *cacheFutureWatcher = new QFutureWatcher<QVImageAndFileInfo>();
connect(cacheFutureWatcher, &QFutureWatcher<QVImageAndFileInfo>::finished, [cacheFutureWatcher, this](){
addToCache(cacheFutureWatcher->result());
cacheFutureWatcher->deleteLater();
});
cacheFutureWatcher->setFuture(QtConcurrent::run(this, &QVImageCore::readFile, filePath));
这是在readFile中运行的内容:
QVImageCore::QVImageAndFileInfo QVImageCore::readFile(const QString fileName)
{
QVImageAndFileInfo combinedInfo;
QImageReader newImageReader;
newImageReader.setDecideFormatFromContent(true);
newImageReader.setAutoTransform(true);
newImageReader.setFileName(fileName);
const QImage readImage = newImageReader.read();
combinedInfo.readFileInfo = QFileInfo(fileName);
if (readImage.isNull())
{
emit readError(QString::number(newImageReader.error()) + ": " + newImageReader.errorString(), fileName);
currentFileDetails = lastFileDetails;
emit fileInfoUpdated();
return combinedInfo;
}
combinedInfo.readImage = readImage;
return combinedInfo;
}
我希望在另一个线程中读取图像后,内存使用不会显着增加,并且会随着时间的推移而减少。
如果需要更多信息,我很乐意提供。我已经为此困扰了几个星期。
我提交了一个错误报告,并从这里的Qt开发人员那里获得了一些见识:https : //bugreports.qt.io/browse/QTBUG-73413
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句