我在网上搜索过,但无法找到答案。 我们的应用程序中有两种方法:
a)第一个返回HttpResponseMessage
,里面有1个文件。它使用StreamContent
。
response.Content = new StreamContent(memStream);
response.Content.Headers.ContentLength = memStream.Length;
b)第二个返回HttpResponseMessage
,包括zipp-ed文件(多个压缩文件)。它使用ByteArrayContent。
response.Content = new ByteArrayContent(memStream.ToArray());
response.Content.Headers.ContentLength = memStream.ToArray().Length;
我只想了解为什么在我们的应用程序中只返回一个文件时使用StreamContent,而在返回zip-ed文件时使用ByteArrayContent。是否存在某种逻辑,我可以改变以在两种情况下使用相同的方式?
答案 0 :(得分:3)
除了传闻之外没有任何东西支持我的假设,流应该比字节数组更有效(它们基本上一次使用较小的字节缓冲区)。
对于Web应用程序,我认为流式传输变得更加高效,因为它允许消费者在页面可用时实际下载页面,而不是等待所有内容在内存中准备就绪。 / p>
但是看起来你的应用在两种情况下都使用了MemoryStream
,所以实际上它可能没什么区别(因为内存流是一个字节数组的包装器......在内存中) )。但是它会调用memStream.ToArray()
两次,效率较低,因为它第二次将内部缓冲区复制到新数组只是为了得到它的长度(你可以用memStream.Length
直接调用它。
当然,在不知道应用程序其余部分正在做什么的情况下,可能有一个原因是它在提供之前整理所有压缩数据。