Télécharger le fichier avec WebClient ou HttpClient?

Je suis en train de télécharger un fichier à partir d'une URL et je dois choisir entre le client web et HttpClient. J'ai référencé cette article et plusieurs autres articles sur l'internet. Partout, il est suggéré d'aller pour HttpClient en raison de sa grande asynchrone de soutien et d'autres .Net 4.5 privilèges. Mais je ne suis pas encore totalement convaincu et besoin de plus d'entrées.

Je suis à l'aide de code ci-dessous pour télécharger le fichier à partir d'internet:

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())
    {
    }
}

De mon point de vue, je vois qu'un seul inconvénient dans l'utilisation de WebClient, qui serait le non appel asynchrone, le blocage du thread appelant. Mais si je ne suis pas inquiet sur le blocage de fil ou de l'utilisation client.DownloadFileAsync() de tirer parti de l'asynchrone en charge?

D'autre part, si j'utilise HttpClient, n'est-ce pas, je le chargement de chaque octet d'un fichier dans la mémoire et écriture dans un fichier local? Si la taille du fichier est trop grand, ne sera pas de surcharge de mémoire être cher? Qui pourrait être évité si nous utilisons le service WebClient, car il va écrire directement sur un fichier local et ne consomme pas de mémoire système.

Donc, si la performance est ma plus grande priorité, l'approche qui dois-je utiliser pour le téléchargement? Je voudrais être clarifié si mon hypothèse ci-dessus est fausse, et je suis ouvert à toute autre approche ainsi.

  • Ne stackoverflow.com/questions/37799419/... de l'aide?
  • Voir aussi codereview.stackexchange.com/questions/69950/... .
  • Il y a encore un problème avec WebClient: Il ne fonctionnera pas dans .NET de Base.
  • "inconvénient dans l'utilisation de WebClient...le non appel asynchrone, le blocage du thread appelant" Donc utiliser les DownloadFileAsync.
  • WebClient est obsolète sincd 2012 et les deux extraits sont en train de faire des choses différentes. Vous pouvez utiliser HttpClient.GetStreamAsync pour obtenir un flux de données dans le fichier en une seule ligne, puis utiliser .CopyToAsync() de copier le flux du contenu d'un fichier de flux
  • ain't I loading every single byte of a file into memory non, sauf si vous demandez explicitement pour cette avec GetByteArrayAsync
  • tu veux sans doute dire DownloadFileTaskAsync. L'ancienne DownloadFileAsync utiliser les événements pour informer que le téléchargement terminé, il n'est pas asynchrone dans le sens utilisé de nos jours
  • Avez-vous un exemple pour qui? Ça sonne bien, mais je suis trop nouveau pour qu'il fonctionne.

InformationsquelleAutor Saket | 2017-08-16