4

我试图分析我的程序,它是一个文件下载器。我使用 5QNetworkRequest来提高传输速度,它们都连接到同一个 readyRead()插槽。

我使用 QMap 来缓冲那些字节数组。

当下载速度达到,例如 5 MiB/s 时,我发现 CPU 成本显着上升,接近 100%,readyRead()每秒调用 30 次。

对此有什么建议吗,例如我可以让 QNetworkReply 缓冲其 io 设备,减少发出的信号量吗?

UPDATA

我在 readyReady() 中做了一些调试输出:(reply这里是从 sender() 转换而来的)

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

并且每秒大约输出 30 个,每个包含 1500 个字节

4

1 回答 1

2

快速查看您的代码后,我有一个提示。您正在使用为附加数据重新分配内部缓冲区的QByteArray::append成员 ( )。downloadBuffers如果您能够预测将在每个下载缓冲区中存储多少数据,则可以使用QByteArray::reserve确切的数据量。如果你不能,你可以简单地保留 ie 1mb 并在每次你的下一个 append 超过 current 时逐步保留 1mb 内存QByteArray::capacity。例如,您可以downbufferSize为每个缓冲区保留。这是一个轻微的优化,但应该给你一些时间

于 2012-05-25T08:16:16.250 回答