我用C ++中的 Qt 5.12.3 用QNetworkReply和QNetworkAccessManager创建了文件下载器。 下载文件开始时,CPU使用率会升高(尤其是在ARM设备上)。
桌面-cpu i7 @ 4GHz-Linux操作系统: cpu的使用率是2%-7%,具体取决于下载速度。平均CPU使用率为5%,最大下载速度为20 Mb / s。调试和发布版本中的CPU使用率都是相同的。
SBC-ARM cpu @ 1,53Ghz-Linux操作系统: cpu的使用率为5%-50%,具体取决于下载速度。平均CPU使用率为40%,最大下载速度为20 Mb / s。通过发布版本检查CPU使用率。
在Qt中通过HTTPS下载文件时,CPU使用率过高是正常的吗?还是我遗漏了一些东西?
代码: 开始下载文件:
qDebug() << "HTTP: starting download FILE" << file_name << "from" << url.toString();
QNetworkRequest req(url);
req.setMaximumRedirectsAllowed(3);
req.setHeader(QNetworkRequest::UserAgentHeader, http_user_agent);
req.setRawHeader("Accept-Encoding", "identity");
req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
const QByteArray range_header_value = "bytes=" + QByteArray::number(curr_file_size) + "-";
req.setRawHeader("Range", range_header_value);
net_reply = nam->get(req);
net_reply->setReadBufferSize(10 * 1024 * 1024);
connect(net_reply, &QNetworkReply::finished, this, &file_downloader::operation_finished);
connect(net_reply, &QNetworkReply::metaDataChanged, this, &file_downloader::metadata_changed);
connect(net_reply, &QNetworkReply::downloadProgress, this, &file_downloader::download_progress);
我每250毫秒从net_reply
中读取内容:
read_buffer.append(net_reply->read(read_buffer_size));
if(read_buffer.size() >= read_buffer_size)
{
const qint64 bytes_written = file->write(read_buffer);
read_buffer.clear();
if(bytes_written == -1)
{
qDebug() << "Error write to FILE:" << file->fileName() << ". Aborting download";
QTimer::singleShot(0, net_reply, &QNetworkReply::abort);
}
}
为尽量减少CPU使用率,我尝试:
ReadyRead
信号中的net_reply,read
函数和readAll
函数读取net_reply,有人建议还是通过HTTPS下载文件时这些CPU使用率正常?
答案 0 :(得分:0)
wget
的CPU使用情况和Qt的下载情况非常相似。因此,我认为这些CPU使用率是正常的。