gpt4 book ai didi

c# - 将大型数据表流出到 excel 文件

转载 作者:太空宇宙 更新时间:2023-11-03 16:05:44 25 4
gpt4 key购买 nike

我正在尝试将数据表流式传输到 MVC 中的 excel 文件。当行数超过 250,000 时,它会给我 OutOfMemory 异常。以下是代码:

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

我觉得通过buffer写入内存流应该可以解决OutOfMemory问题。但是,我无法这样做。我应该如何修改上面的代码以缓冲写入内存流?

谢谢

最佳答案

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

解决方案:

  1. 直接写入 context.HttpContext.Response.OutputStream 而不是内存。缺点:杂乱无章,您必须处理 Content-Type 和 Content-Disposition 等 header 。

  2. 我的首选解决方案。查看此问题的最佳答案:Writing to Output Stream from Action

关于c# - 将大型数据表流出到 excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19527188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com