QNetworkReply,QNetworkAccessManager-通过HTTPS下载文件-CPU使用率高

时间:2019-05-01 12:18:13

标签: c++ qt

我用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,
  • 仅读取net_reply而不保存到文件
  • 使用read函数和readAll函数读取net_reply,
  • 在QtCreator中使用Callgrind和perf探查器-但是它们都以我的代码(例如:q_SSL_read,__ tpstrtab_dax_pte_fault_done)向我展示了高成本

有人建议还是通过HTTPS下载文件时这些CPU使用率正常?

1 个答案:

答案 0 :(得分:0)

使用wget

CPU使用情况和Qt的下载情况非常相似。因此,我认为这些CPU使用率是正常的。