Я пытаюсь загрузить файл с URL-адреса, и мне нужно выбрать между WebClient и HttpClient. Я ссылался на эту статью и несколько других статей в Интернете. Всюду предлагается перейти на HttpClient из-за его большой поддержки async и других привилегий.Net 4.5. Но я все еще не полностью убежден и нуждаюсь в большем количестве ресурсов.
Я использую ниже код для загрузки файла из Интернета:
WebClient:
WebClient client = new WebClient();
client.DownloadFile(downloadUrl, filePath);
HttpClient:
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = await client.GetAsync(url))
using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
{
}
}
С моей точки зрения, я вижу только один недостаток в использовании WebClient, это будет неасинхронный вызов, блокирующий вызывающий поток. Но что, если меня не беспокоит блокировка потока или использование client.DownloadFileAsync()
чтобы использовать поддержку async?
С другой стороны, если я использую HttpClient, я не загружаю каждый байт файла в память, а затем записываю его в локальный файл? Если размер файла слишком велик, не будет ли дорогостоящим издержки памяти? Который можно было бы избежать, если мы будем использовать WebClient, поскольку он будет напрямую записывать в локальный файл и не потреблять системную память.
Итак, если производительность - мой максимальный приоритет, какой подход я должен использовать для загрузки? Я хотел бы получить разъяснение, если мое предположение неверно, и я также открыт для альтернативного подхода.