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

由网友(君王为美人所得天)分享简介:MicrosoftHttpClient的官方文档指出,如果我们想使用HttpClient下载大文件,我们应该流式传输这些下载,而不使用默认缓冲。如果使用默认缓冲区,客户端内存使用量将非常大,可能会导致性能大幅下降。默认缓冲是什么,我们如何更改它,以便无论我们最终下载的文件大小如何,都不会遇到上述问题?如有虚拟代码片段,...

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

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

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

共享文件设置方法 怎么设置共享文件访问权限

如有虚拟代码片段,我们将不胜感激!

推荐答案

您必须使用GetStreamAsync方法。如documentation中所述:

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

示例:

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);
}

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

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

阅读全文

相关推荐

最新文章