Я хочу загрузить файл из ответа GET HTTP REQUEST.Для загрузки потока я использую HttpClient
, как в этом примере:
using System.Net.Http;
using System.Net.Http.Headers;
using ModernHttpClient;
var exClient = new HttpClient(new NativeMessageHandler());
var request = new HttpRequestMessage(new HttpMethod(method), "https://speed.hetzner.de/10GB.bin");
HttpResponseMessage response = await exClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
var contentStream = await response.Content.ReadAsStreamAsync();
Я хочу сохранить файл на диск, поэтому я использую System.IO
.
Сначала я использую этот код:
using IOFile = System.IO.File;
Stream file = IOFile.Open(path, FileMode.Create);
contentStream.CopyTo(file);
file.close;
Но я также хотел получить информацию о ходе загрузки, поэтому я переключаюсь на этот код:
using IOFile = System.IO.File;
Stream file = IOFile.Open(path, FileMode.Create);
var buffer = new byte[81920];
int received = 0;
int read = 0;
while ((read = await contentStream.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
file.Write(buffer, 0, read);
received += read;
//progressCallback?.Invoke(received);
}
file.Close();
Моя проблема в том, что время загрузки увеличивается более чем в два разакак и в методе CopyTo
(около 30 Мбит / с против ~ 90 для CopyTo).
Чем объясняется эта разница?Как мне приблизиться к производительности CopyTo?