我有以下设置和场景:
- QT/QML-应用程序运行,可以触发下载一个 20MB 的文件到
/tmp/IMAGE
(使用QNetworkManager()
,QNetworkReply()
,readyRead()
) /tmp
是一个 ramdisk - 有 40+MB 的可用空间(当 QT/QML 应用程序正在运行时)- 在 QT/QML 应用程序运行时,我可以轻松地
wget
将 20MB 文件/tmp/IMAGE
但是,当尝试通过 QT/QML 应用程序下载文件时(使用QNetworkManager()
,QNetworkReply()
和readyRead()
-signal,qt/qml 应用程序甚至在实际下载一半文件之前就被内存不足的杀手杀死了(根据downloadProgress()
和的大小/tmp/IMAGE
)。
据我了解,readyRead()
它是专门为部分下载块、将其写入磁盘、清除其使用的 RAM 以及下载和写入下一个块而设计的。
然而,这种方法似乎比使用方法消耗更多的内存wget
——在下载了 10MB 的文件之后,Qt/QML 应用程序有一个我无法解释的巨大内存占用。
我基本上在做什么,它将readyRead()
我的插槽与我命名的插槽连接起来partialDownloadFinished()
:file->write(reply->readAll());
我还检查了块大小是否可能会变大 via bytesAvailable()
,但似乎也并非如此。
我的下一个猜测是数据的下载速度比写入(ram)磁盘的速度要快,但似乎也并非如此。
所以我被困住了。有人对此有任何线索或暗示吗?
非常感谢!