使用readyRead()使用QNetworkAccessManager / QNetworkReply下载我的RAM

时间:2016-01-26 21:20:54

标签: qt qml qnetworkaccessmanager qnetworkreply qnetworkrequest

我正在进行以下设置和方案:

  • 运行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() - 信号,qt /即使在实际下载文件的一半之前,qml-application也会被内存不足的杀手杀死(根据downloadProgress()/tmp/IMAGE的大小)。

据我了解,readyRead()专门用于部分下载块,将其写入磁盘,清除其使用的RAM以及下载和写入下一个块。

然而,该方法似乎大量消耗更多RAM,使用wget - 在下载了10MB文件后,Qt / QML应用程序占用了大量内存,我无法解释。

我基本上在做什么,它将readyRead()与我的名为partialDownloadFinished()的广告位相关联,后者只执行:file->write(reply->readAll());

我还检查了块大小是否可能或者可能通过bytesAvailable()变大,但是情况似乎也不是这样。

我的下一个猜测是,数据的下载速度比写入(ram)磁盘的速度快,但似乎也不是这样。

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

非常感谢!

0 个答案:

没有答案