stream出大数据表excel文件

我试图stream出一个数据表到MVC的Excel文件。 当行数超过25万时,它给我OutOfMemoryexception。 以下是代码:

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"); 

我认为通过缓冲区写入内存stream应该解决OutOfMemory问题。 但是,我还没有这样做。 我应该如何修改上面的代码缓冲写入内存stream?

谢谢

内存不足,因为整个表先写入内存,无论StreamWriter在发送到客户端之前是否被刷新。

解决scheme:

  1. 直接写入context.HttpContext.Response.OutputStream而不是内存。 骗子:凌乱,你必须照顾的头像内容types和内容处置。

  2. 我的首选解决scheme。 查看这个问题的最佳答案: 从Action中写入输出stream