如何正确配置HttpClient的大文件流传输?

Sup*_*Bob 3 c# dotnet-httpclient

微软的HttpClient官方文档指出,如果我们想使用HttpClient下载大文件,我们应该

流式传输这些下载而不使用默认缓冲。如果使用默认缓冲,客户端内存使用量将变得非常大,可能导致性能大幅下降。

默认缓冲是什么?我们如何更改它,以便无论我们最终下载的文件大小如何,都不会遇到上述问题?

虚拟代码片段将不胜感激!

Alb*_*rto 6

你必须使用该GetStreamAsync方法。如文档中所述:

该操作不会阻塞。返回的任务对象将在读取响应标头后完成。此方法不读取也不缓冲响应正文

例子:

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);
}
Run Code Online (Sandbox Code Playgroud)

所有其他方法如GetByteArrayAsyncGetStringAsync将缓冲响应,并在读取整个响应正文后完成。

使用的默认缓冲区大小是_DefaultCopyBufferSizeCopyToAsync声明的 81920 字节。您可以使用重载来更改它。CopyToAsync(Stream, Int32)