【发布时间】:2016-12-08 09:57:26
【问题描述】:
我使用下面的代码在HttpResponseMessage中返回一个字节数组:
using (WebResponse response = (HttpWebResponse)request.GetResponse())
{
byte[] bytes = ReadFully(response.GetResponseStream());
......
}
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16*1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray(); // This line throws OutOfMemory exception
}
}
在最后一个 return ms.ToArray() 语句中引发了 OutOfMemory 异常。
我需要将生成的byte[] 设置为HttpResponseMessage.Content。
【问题讨论】:
-
流有多大?为什么不直接写入响应流?
-
大约 250MB...
-
你在使用 ASP.NET MVC 吗?
File()辅助函数接受流参数,其他函数也是如此。 250MB 是 lot 用于本地缓存,仅用于复制到另一个流 -
只需尝试使用响应流实例化 StreamReader,然后使用 StreamReader.ReadToEnd()。这将为您提供结果字符串
-
@Radinator 为什么你认为分配 250MB 的字符串会比分配任何其他 250MB 对象的内存问题更少?
标签: c# arrays exception out-of-memory memorystream