Qnetworkreply,QnetworkAccessManager- https下载文件 - 高CPU使用情况

QNetworkReply, QNetworkAccessManager - download file by HTTPS - high cpu usage

本文关键字:CPU 用情 情况 文件 QnetworkAccessManager- https 下载 Qnetworkreply      更新时间:2023-10-16

我使用qnetworkreply和qnetworkAccessManager在C 中创建了文件下载器, qt> qt 5.12.3 。当下载文件启动时,CPU使用率上升到高价值(尤其是在ARM设备上(。

  • 桌面-CPU I7@4GHz -Linux操作系统:根据下载速度,CPU使用率为2%-7%。最大下载速度为20 MB/s,平均CPU使用率为5%。在调试和发布构建中,CPU使用量相同。

  • SBC -ARM CPU @1,53GHz -Linux操作系统:根据下载速度,CPU使用率为5%-50%。最大下载速度为20 mb/s,平均CPU使用率为40%。使用发行版构建检查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,带有/不带缓冲区,
  • 仅读取net_reply,而无需保存文件,
  • 使用read功能和readAll函数读取net_reply,
  • 在qtCreator中使用CallGrind和Perf Profiler-但两者都以我的代码显示高成本(例如:q_ssl_read,__tpstrtab_dax_pte_fault_done(

通过https下载文件时,任何建议或这些CPU使用情况是正常的?

wget和QT下载的CPU用法相同。因此,我认为这是CPU的使用情况。