mirror of
https://github.com/amtoaer/bili-sync.git
synced 2026-09-07 00:17:24 +08:00
perf: 使用 2MB 内存缓冲区以减少系统调用次数,加快文件下载速度
This commit is contained in:
@@ -8,7 +8,7 @@ use async_tempfile::TempFile;
|
|||||||
use futures::TryStreamExt;
|
use futures::TryStreamExt;
|
||||||
use reqwest::{Method, StatusCode, header};
|
use reqwest::{Method, StatusCode, header};
|
||||||
use tokio::fs::{self};
|
use tokio::fs::{self};
|
||||||
use tokio::io::{AsyncSeekExt, AsyncWriteExt};
|
use tokio::io::{AsyncSeekExt, AsyncWriteExt, BufWriter};
|
||||||
use tokio::process::Command;
|
use tokio::process::Command;
|
||||||
use tokio::task::JoinSet;
|
use tokio::task::JoinSet;
|
||||||
use tokio_util::io::StreamReader;
|
use tokio_util::io::StreamReader;
|
||||||
@@ -155,8 +155,9 @@ impl Downloader {
|
|||||||
.error_for_status_ext()?;
|
.error_for_status_ext()?;
|
||||||
let expected = resp.header_content_length();
|
let expected = resp.header_content_length();
|
||||||
let mut stream_reader = StreamReader::new(resp.bytes_stream().map_err(std::io::Error::other));
|
let mut stream_reader = StreamReader::new(resp.bytes_stream().map_err(std::io::Error::other));
|
||||||
let received = tokio::io::copy(&mut stream_reader, file).await?;
|
let mut file_writer = BufWriter::with_capacity(2 * 1024 * 1024, file);
|
||||||
file.flush().await?;
|
let received = tokio::io::copy(&mut stream_reader, &mut file_writer).await?;
|
||||||
|
file_writer.flush().await?;
|
||||||
if let Some(expected) = expected {
|
if let Some(expected) = expected {
|
||||||
ensure!(
|
ensure!(
|
||||||
received == expected,
|
received == expected,
|
||||||
@@ -244,8 +245,9 @@ impl Downloader {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
let mut stream_reader = StreamReader::new(resp.bytes_stream().map_err(std::io::Error::other));
|
let mut stream_reader = StreamReader::new(resp.bytes_stream().map_err(std::io::Error::other));
|
||||||
let received = tokio::io::copy(&mut stream_reader, &mut file_clone).await?;
|
let mut file_writer = BufWriter::with_capacity(2 * 1024 * 1024, file_clone);
|
||||||
file_clone.flush().await?;
|
let received = tokio::io::copy(&mut stream_reader, &mut file_writer).await?;
|
||||||
|
file_writer.flush().await?;
|
||||||
ensure!(
|
ensure!(
|
||||||
received == end - start + 1,
|
received == end - start + 1,
|
||||||
"downloaded bytes mismatch: expected {}, got {}",
|
"downloaded bytes mismatch: expected {}, got {}",
|
||||||
|
|||||||
Reference in New Issue
Block a user