StreamContent和ByteArrayContent webApi的差异

时间:2016-10-14 13:32:09

标签: asp.net-web-api download

我在网上搜索过,但无法找到答案。 我们的应用程序中有两种方法:

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。是否存在某种逻辑,我可以改变以在两种情况下使用相同的方式?

1 个答案:

答案 0 :(得分:3)

除了传闻之外没有任何东西支持我的假设,流应该比字节数组更有效(它们基本上一次使用较小的字节缓冲区)。

对于Web应用程序,我认为流式传输变得更加高效,因为它允许消费者在页面可用时实际下载页面,而不是等待所有内容在内存中准备就绪。 / p>

但是看起来你的应用在两种情况下都使用了MemoryStream,所以实际上它可能没什么区别(因为内存流是一个字节数组的包装器......在内存中) )。但是它会调用memStream.ToArray()两次,效率较低,因为它第二次将内部缓冲区复制到新数组只是为了得到它的长度(你可以用memStream.Length直接调用它。

当然,在不知道应用程序其余部分正在做什么的情况下,可能有一个原因是它在提供之前整理所有压缩数据。