使用高速互联网连接时,降低 readyRead() 的 CPU 成本



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

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

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

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

上行数据

我在readyReady()中做了一些调试输出:(这里的reply是从发件人()投射而来的)

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

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

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