1

我有以下设置和场景:

  • 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)磁盘的速度要快,但似乎也并非如此。

所以我被困住了。有人对此有任何线索或暗示吗?

非常感谢!

4

0 回答 0