我想從URL下載文件,我必須在WebClient和HttpClient之間進行選擇。我在網上引用了this文章和其他幾篇文章。在任何地方,都建議使用HttpClient,因爲它有很好的異步支持和其他.Net 4.5特權。但我仍然不完全相信,需要更多投入。用WebClient或HttpClient下載文件?
我使用下面的代碼從Internet下載文件:
Web客戶端:
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,可以避免這種情況,因爲它會直接寫入本地文件而不會佔用系統內存。
因此,如果性能是我最重要的,我應該使用哪種方法進行下載?如果我的上述假設是錯誤的,我想澄清一下,並且我也願意採用替代方法。
是否https://stackoverflow.com/questions/37799419/download-pdf-file-from-api-using-c-sharp幫助嗎? – mjwills
另請參閱https://codereview.stackexchange.com/questions/69950/single-instance-of-reusable-httpclient。 – mjwills
WebClient還有一個問題:它不能在.NET Core中工作。 – CodeOrElse