1

次のセットアップとシナリオがあります。

  • 実行中の QT/QML アプリケーション。20MB のファイルを/tmp/IMAGE( QNetworkManager()QNetworkReply()、を使用してreadyRead())にダウンロードするようにトリガーできます。
  • /tmpRAM ディスクです - 40 MB 以上の空き容量があります (QT/QML アプリケーションの実行中)
  • QT/QML アプリケーションの実行中にwget20MB のファイルを簡単に転送できます/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) ディスクに書き込まれるよりも速くダウンロードされますが、そうではないようです。

だから私は立ち往生しています。これについて手がかりやヒントを持っている人はいますか?

どうもありがとう!

4

0 に答える 0