.NET WebClient DownloadFile очень медленно, вина Apache?

Я видел дюжину схожих вопросов, но ни один из них не отвечал моей проблеме. Я нахожусь на 200 МБ волоконно-оптической сети, загружающей с сервера на 1 ГБ к SSD. Я могу очень быстро загрузить файл с помощью браузера, но при попытке загрузки с помощью .NET загрузка файла размером 8 МБ занимает более минуты.

Настройка первого раунда довольно проста:

var WClient = new WebClient();
WClient.Proxy = null;
WebRequest.DefaultWebProxy = null;
WClient.DownloadFile(upgradeUrl, zipFilePath);

Я добавил материал о Proxy=null после прочтения некоторых постов, но это было не лучше. Некоторые люди предложили, может ли быть проблема с поиском DNS, поэтому сначала я проверил ping на сервере, чтобы он уже инициализировал это. Я также попытался добавить случайную строку типа ?random=9238432 в конец URL, чтобы избежать проблем с кэшированием.

После некоторого дальнейшего тестирования я нашел эту статью: https://dejanstojanovic.net/aspnet/2018/march/download-file-in-chunks-in-parallel-in-c/

После его реализации, он все еще не шел быстрее, или так казалось, пока я не заметил вывод консоли:

Size: 8890499bytes
Time taken: 439ms
Parallel: 2

Реальное время для этой загрузки было 1 минута, 40 секунд. Загрузка прошла успешно, это просто навсегда.

Меня удивило, есть ли что-то для настройки в .NET или apache2, чтобы зарегистрировать, что загрузка завершена и она может продолжаться?

ОБНОВЛЕНИЕ: Следующее сработало намного быстрее для меня.

public  static async Task DownloadFile(string fileUri, string locationToStoreTo) {
    using (var client = new HttpClient())
    using (var response = await client.GetAsync(fileUri)) {
        response.EnsureSuccessStatusCode();
        var generatedName = locationToStoreTo;
        var stream = await response.Content.ReadAsStreamAsync();
        using (var fileStream = File.Create(generatedName)) {
            stream.CopyTo(fileStream);
        }
        return generatedName;
    }
}

-1
задан Alan 26 June 2019 в 23:03
поделиться