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

时间:2012-05-25 07:01:55

标签: qt qt4.8

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

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

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

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

UPDATA

我在readyReady()中做了一些调试输出: (reply来自sender())

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

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

1 个答案:

答案 0 :(得分:2)

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