微软的官方文档Http客户端 https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.8指出如果我们想使用 HttpClient 下载大文件,我们应该
流式传输这些下载而不使用默认缓冲。如果使用默认缓冲,客户端内存使用量将变得非常大,可能导致性能大幅下降。
默认缓冲是什么?我们如何更改它,以便无论我们最终下载的文件大小如何,都不会遇到上述问题?
虚拟代码片段将不胜感激!
你必须使用GetStreamAsync
方法。如中所述文档 https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.getstreamasync?view=netframework-4.8:
该操作不会阻塞。返回的任务对象将在读取响应标头后完成。此方法不读取也不缓冲响应正文.
example:
HttpClient httpClient = new HttpClient();
var requestUri = "http://url-to-resource.com";
var stream = await httpClient.GetStreamAsync(requestUri);
using (var fileStream = File.Create("outputFile.ext"))
{
await stream.CopyToAsync(fileStream);
}
所有其他方法都像GetByteArrayAsync
or GetStringAsync
将缓冲响应并在读取整个响应正文后完成。
使用的默认缓冲区大小CopyToAsync
声明为 81920 字节_默认复制缓冲区大小 https://referencesource.microsoft.com/#mscorlib/system/io/stream.cs,131。您可以使用重载来更改它CopyToAsync(Stream, Int32)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)