>我正在尝试将数据表流式传输到MVC中的excel文件。当行数超过 250,000 时,它会为我提供大量内存不足异常。以下是代码:
var memStream = new MemoryStream();
var streamWriter = new StreamWriter(memStream);
streamWriter.WriteLine("{0}", "<TABLE>");
foreach (DataRow rw in dt.Rows)
{
streamWriter.WriteLine("{0}", "<TR>");
foreach (DataColumn cl in dt.Columns)
{
streamWriter.WriteLine("{0}", "<TD>");
streamWriter.WriteLine("{0}", rw[cl].ToString());
streamWriter.WriteLine("{0}", "</TD>");
}
streamWriter.WriteLine("{0}", "</TR>");
}
streamWriter.WriteLine("{0}", "</TABLE>");
streamWriter.Flush();
memStream.Seek(0, SeekOrigin.Begin);
return File(memStream, "application/vnd.ms-excel", "Test.xls");
我认为通过缓冲区写入内存流应该可以解决内存不足问题。但是,我未能这样做。我应该如何修改上面的代码以缓冲写入内存流?
谢谢
内存不足,因为无论 StreamWriter 在发送到客户端之前是否刷新,整个表都会首先写入内存。
解决 方案:
-
写入上下文。HttpContext.Response.OutputStream 直接代替内存。缺点:凌乱,你必须处理像内容类型和内容处置这样的标题。
-
我的首选解决方案。请参阅此问题的最佳答案:从操作写入输出流