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

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

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

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

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

UPDATA

我在readyReady()中做了一些调试输出:
(这里的回复来自发件人())

qDebug()<< “得到了”<< reply-> readAll().length()<< “字节”; 每秒大约30个输出,每个包含1500个字节

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

点赞