首页 > 解决方案 > QNetworkReply、QNetworkAccessManager - 通过 HTTPS 下载文件 - 高 CPU 使用率

问题描述

我使用Qt 5.12.3在 C++ 中使用 QNetworkReply 和 QNetworkAccessManager 创建了文件下载器。当下载文件开始时,cpu 使用率上升到很高的值(尤其是在 ARM 设备上)。

在 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);

net_reply我每 250 毫秒读取一次内容:

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 使用率,我尝试:

通过 HTTPS 下载文件时有任何建议或这些 CPU 使用率是否正常?

标签: c++qt

解决方案


Qt 使用和下载的CPU 使用率wget几乎相同。因此,我认为这些 CPU 使用率是正常的。


推荐阅读