ASP MVC FileStreamResult内存不足异常
本文关键字:异常 内存不足 FileStreamResult MVC ASP | 更新日期: 2023-09-27 18:30:04
我有一个大的zip文件(500MB或更大),我正在将其读取到MemoryStream中,并作为FileStreamResult返回。然而,对于超过200MB的文件,我得到了一个OutOfMemory异常。在我的行动中,我有以下代码:
MemoryStream outputStream = new MemoryStream();
using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
//Response.BufferOutput = false; // to prevent buffering
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
outputStream.Write(buffer, 0, bytesRead);
}
}
outputStream.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(outputStream, content_type);
您可以尝试此页面上提出的解决方案:
使用文件流发送500mb大文件时出现OutOfMemoryException
它展示了如何将文件读取到IStream
中并发送响应。
如果将文件读取到MemoryStream中,则仍然需要为整个文件分配内存,因为在内部,MemoryStream只不过是一个字节数组。
因此,目前您正在使用较小的中间缓冲区(也在内存中)将文件读取到较大的内存缓冲区中。
为什么不将文件流直接转发到FileStreamResult?
using (var fs = new FileStream(filepath, FileMode.Open, FileAccess.Read))
{
return new FileStreamResult(fs, content_type);
}