C# 将大型数据表输出到excel文件
我正在尝试在MVC中将数据表流式输出到excel文件。当行数超过250000时,它为我提供了OutOfMemory例外。代码如下:C# 将大型数据表输出到excel文件,c#,excel,asp.net-mvc-4,stream,C#,Excel,Asp.net Mvc 4,Stream,我正在尝试在MVC中将数据表流式输出到excel文件。当行数超过250000时,它为我提供了OutOfMemory例外。代码如下: var memStream = new MemoryStream(); var streamWriter = new StreamWriter(memStream); streamWriter.WriteLine("{0}", "<TABLE>"); foreach (DataRow rw in dt.Rows) {
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");
var memStream=newmemoryStream();
var streamWriter=新的streamWriter(memStream);
streamWriter.WriteLine(“{0}”,”);
foreach(数据行rw在dt.行中)
{
streamWriter.WriteLine(“{0}”,”);
foreach(数据列cl在dt.列中)
{
streamWriter.WriteLine(“{0}”,”);
streamWriter.WriteLine(“{0}”,rw[cl].ToString());
streamWriter.WriteLine(“{0}”,”);
}
streamWriter.WriteLine(“{0}”,”);
}
streamWriter.WriteLine(“{0}”,”);
streamWriter.Flush();
memStream.Seek(0,SeekOrigin.Begin);
返回文件(memStream、“application/vnd.ms excel”、“Test.xls”);
我认为通过缓冲区写入内存流应该可以解决OutOfMemory问题。然而,我未能做到这一点。我应该如何修改上面的代码,以便对内存流进行缓冲写入
谢谢内存不足,因为无论StreamWriter在发送到客户端之前是否刷新,整个表都会首先写入内存 解决方案:
如果在循环中调用
streamWriter.Flush()
,会有帮助吗?通常,flush会将缓冲区中的所有内容都写入,所以我认为这会有所帮助。不过,仔细想想,如果您试图在MemoryStream中放入超出可用内存的内容,这可能没有帮助。@SouthShoreAK:truedstreamwriter.Flush()
。这没用。@SouthShoreAK:谢谢!它帮助我明白了写FileStream
将解决OutOfMemory问题。谢谢。我发现整张表太大,内存不够。所以改用了FileStream
。