次のセットアップとシナリオがあります。
- 実行中の QT/QML アプリケーション。20MB のファイルを
/tmp/IMAGE
(QNetworkManager()
、QNetworkReply()
、を使用してreadyRead()
)にダウンロードするようにトリガーできます。 /tmp
RAM ディスクです - 40 MB 以上の空き容量があります (QT/QML アプリケーションの実行中)- QT/QML アプリケーションの実行中に
wget
20MB のファイルを簡単に転送できます/tmp/IMAGE
ただし、QT/QML アプリケーションを介してファイルをダウンロードしようとすると (および-signal を使用QNetworkManager()
すると、qt/qml アプリケーションは、ファイルの半分が実際にダウンロードされる前であってもメモリ不足キラーによって強制終了されます (およびのサイズ)。QNetworkReply()
readyRead()
downloadProgress()
/tmp/IMAGE
私が理解している限り、readyRead()
チャンクの部分的なダウンロード、ディスクへの書き込み、使用済み RAM のクリア、次のチャンクのダウンロードと書き込みのために特に設計されています。
ただし、その方法は、たとえば使用するよりも多くの RAM を消費するようですwget
-10MB のファイルをダウンロードした後、Qt/QML アプリケーションには説明できない巨大なメモリフットプリントがあります。
私が基本的にやっていることは、次のreadyRead()
名前のスロットに接続することpartialDownloadFinished()
だけです:file->write(reply->readAll());
チャンクサイズが大きくなる可能性があるかどうかも確認しbytesAvailable()
ましたが、そうではないようです。
私の次の推測では、データは (RAM) ディスクに書き込まれるよりも速くダウンロードされますが、そうではないようです。
だから私は立ち往生しています。これについて手がかりやヒントを持っている人はいますか?
どうもありがとう!