【问题标题】:Differences in StreamContent and ByteArrayContent webApiStreamContent 和 ByteArrayContent webApi 的区别
【发布时间】:2016-10-14 13:32:08
【问题描述】:

我已经搜索了整个网络,但无法找到答案。 我们的应用程序中有两种方法:

a) 第一个返回 HttpResponseMessage,其中包含 1 个文件。它使用StreamContent。

 response.Content = new StreamContent(memStream);
 response.Content.Headers.ContentLength = memStream.Length;

b) 第二个返回HttpResponseMessage,包括压缩文件(压缩的多个文件)。它使用 ByteArrayContent。

response.Content = new ByteArrayContent(memStream.ToArray());
response.Content.Headers.ContentLength = memStream.ToArray().Length;

我只是想了解为什么在我们的应用程序中只返回一个文件时使用 StreamContent,而返回压缩文件时使用 ByteArrayContent。是否存在一些逻辑,我可以更改为在两种情况下使用相同的方式?

【问题讨论】:

    标签: asp.net-web-api download


    【解决方案1】:

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

    对于网络应用程序,我相信流式传输会变得更加高效,因为它允许消费者在页面可用时实际下载页面,而不是等待所有内容在内存中准备好。

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

    当然,在不知道应用程序的其余部分在做什么的情况下,它可能有理由在提供所有压缩数据之前对其进行编组。

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 1970-01-01
      • 2017-02-11
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 2017-06-26
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多