https://docs.microsoft.com/en-us/dotnet/api/system.io.stream.copytoasync?view=netframework-4.7.2
аюсь загрузить файл с URL-адреса, и мне приходится выбирать между WebClient и HttpClient. Я ссылалсяэто статья и несколько других статей в интернете. Везде предлагается использовать HttpClient из-за его отличной асинхронной поддержки и других привилегий .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()
использовать асинхронную поддержку?
С другой стороны, если я использую HttpClient, я не загружаю каждый байт файла в память и затем записываю его в локальный файл? Если размер файла слишком велик, не будут ли накладные расходы на память дорогими? Чего можно избежать, если мы используем WebClient, так как он будет напрямую записывать в локальный файл и не использовать системную память.
Итак, если производительность является моим главным приоритетом, какой подход я должен использовать для загрузки? Я хотел бы уточнить, если мое предположение неверно, и я также открыт для альтернативного подхода.