проблема производительности потока загрузки файла c # - PullRequest
0 голосов
/ 10 сентября 2018

Я хочу загрузить файл из ответа 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...