4

ファイルダウンローダーであるプログラムのプロファイリングを試みました。QNetworkRequest転送速度を上げるために 5 を使用します。これらはすべて同じreadyRead()スロットに接続します。

QMap を使用してこれらのバイト配列をバッファリングします。

ダウンロード速度が 5 MiB/秒などに達すると、CPU コストが大幅に上昇し、ほぼ 100%、readyRead()1 秒間に 30 回の呼び出しが発生することがわかりました。

たとえば、QNetworkReply にその io デバイスをバッファリングさせて、送信されるシグナルの量を減らすことはできますか?

更新

readyReady() でいくつかのデバッグ出力を作成しました: (replyここでは、sender() からキャストされました)

qDebug() << "Got: " << reply->readAll().length() << " bytes";

1 秒あたり約 30 の出力で、それぞれに 1500 バイトが含まれます

4

1 に答える 1

2

あなたのコードをざっと見てみると、ヒントが 1 つあります。追加されたデータの内部バッファーを再割り当てするQByteArray::appendメンバー ( ) を使用しています。downloadBuffers各ダウンロード バッファに保存するデータ量を予測できる場合はQByteArray::reserve、正確な量のデータを使用してください。できない場合は、次の追加が current を超えるたびに、単純に 1 MB を予約し、メモリを徐々に 1 MB 予約することができますQByteArray::capacity。たとえばdownbufferSize、バッファごとに予約できます。これはわずかな最適化ですが、しばらく時間がかかるはずです

于 2012-05-25T08:16:16.250 に答える