ren*_*thy 7 download asp.net-web-api
我已经在网上搜索了所有内容,但无法找到答案。我们的应用程序中有两种方法:
a) 第一个返回HttpResponseMessage,里面有 1 个文件。它使用StreamContent.
response.Content = new StreamContent(memStream);
response.Content.Headers.ContentLength = memStream.Length;
Run Code Online (Sandbox Code Playgroud)
b) 第二个返回HttpResponseMessage包含压缩文件(多个压缩文件)。它使用 ByteArrayContent。
response.Content = new ByteArrayContent(memStream.ToArray());
response.Content.Headers.ContentLength = memStream.ToArray().Length;
Run Code Online (Sandbox Code Playgroud)
我只是想了解为什么在我们的应用程序中,当只返回一个文件时使用 StreamContent,而在返回压缩文件时使用 ByteArrayContent。是否有一些逻辑,我可以更改为在两种情况下使用相同的方式?
除了道听途说之外,没有任何东西可以支持我的假设,流应该比字节数组更有效(它们基本上一次使用较小的字节缓冲区)。
就网络应用程序而言,我相信流式传输变得更加高效,因为它允许消费者在页面可用时实际分段下载页面,而不是等待所有内容在内存中准备好。
但看起来您的应用程序MemoryStream在这两种情况下都使用了 a ,因此实际上来说它可能没有太大区别(因为内存流是内存中字节数组的包装器......)。然而,它调用了memStream.ToArray()两次,效率较低,因为它第二次将其内部缓冲区复制到新数组只是为了获取其长度(您可以直接使用memStream.Length.
当然,在不知道应用程序的其余部分在做什么的情况下,也许它有理由在提供之前整理所有压缩数据。