我试图从一个 URL 下载文件,我必须在 WebClient 和 HttpClient 之间做出选择。我已经在互联网上参考了 这个的文章和其他几篇文章。在任何地方,都建议使用 HttpClient,因为它有很强的异步支持和其他支持。净4.5特权。但我仍然不完全信服,需要更多的投入。
我使用以下代码从网上下载文件:
网上客户端:
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,这是可以避免的,因为它将直接写入本地文件,而不会占用系统内存。
那么,如果性能是我的首要任务,我应该使用哪种方法来下载呢?如果我的上述假设是错误的,我希望得到澄清,我也愿意接受其他的方法。