Microsoft的HttpClient官方文档指出,如果我们想使用HttpClient下载大文件,则应该
传输这些下载内容,而不使用默认缓冲。如果使用默认缓冲,则客户端内存使用量将非常大,从而可能导致性能大幅下降。
什么是默认缓冲,以及如何对其进行更改,以便无论最终下载的文件大小如何,都不会遇到上述概述的问题?
虚拟代码段将不胜感激!
您必须使用该GetStreamAsync
方法。如文档中所述:
此操作不会阻止。读取响应头后,返回的Task对象将完成。此方法不读取也不缓冲响应正文。
例:
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
或GetStringAsync
将缓冲响应,并且将在读取整个响应正文之后完成。
通过所使用的默认的缓冲区大小CopyToAsync
是81920个字节由作为声明_DefaultCopyBufferSize。您可以通过使用重载来更改它CopyToAsync(Stream, Int32)
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句