gpt4 book ai didi

c# - 使用 WebClient 或 HttpClient 下载文件?

转载 作者:IT王子 更新时间:2023-10-29 04:50:15 27 4
gpt4 key购买 nike

我正在尝试从 URL 下载文件,我必须在 WebClient 和 HttpClient 之间做出选择。我引用了 this文章和互联网上的其他几篇文章。在任何地方,都建议使用 HttpClient,因为它具有强大的异步支持和其他 .Net 4.5 特权。但我仍然不完全相信,需要更多的投入。

我正在使用以下代码从互联网下载文件:

网络客户端:

WebClient client = new WebClient();
client.DownloadFile(downloadUrl, filePath);

HTTP 客户端:

using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = await client.GetAsync(url))
using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync())
{
}
}

从我的角度来看,我只能看到使用 WebClient 的一个缺点,那就是非异步调用,阻塞了调用线程。但是,如果我不担心线程阻塞或使用 client.DownloadFileAsync() 来利用异步支持怎么办?

另一方面,如果我使用 HttpClient,我不是将文件的每个字节都加载到内存中,然后将其写入本地文件吗?如果文件太大,内存开销不会很大吗?如果我们使用 WebClient 就可以避免这种情况,因为它会直接写入本地文件而不占用系统内存。

那么,如果性能是我的首要任务,我应该使用哪种下载方法?如果我的上述假设是错误的,我想得到澄清,我也愿意接受其他方法。

最佳答案

您可以使用 .Net 4.5+ native 执行此操作。我尝试按照您的方式进行操作,然后我在 Intellisense 中找到了一种似乎有意义的方法。

https://learn.microsoft.com/en-us/dotnet/api/system.io.stream.copytoasync?view=netframework-4.7.2

uri = new Uri(generatePdfsRetrieveUrl + pdfGuid + ".pdf");
HttpClient client = new HttpClient();
var response = await client.GetAsync(uri);
using (var fs = new FileStream(
HostingEnvironment.MapPath(string.Format("~/Downloads/{0}.pdf", pdfGuid)),
FileMode.CreateNew))
{
await response.Content.CopyToAsync(fs);
}

关于c# - 使用 WebClient 或 HttpClient 下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45711428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com