gpt4 book ai didi

asp.net - 生成大型Excel电子表格时出现OutOfMemoryException

转载 作者:行者123 更新时间:2023-12-02 04:08:39 25 4
gpt4 key购买 nike

我在ASP.NET应用程序中使用NPOI 1.2.3.0将相当大的SQL查询的结果导出到Excel 2003 XLS文件。

简而言之,查询结果将填充到ADO.NET数据表中。然后,我有一个例程遍历DataTable中的行,并为每行向NPOI电子表格添加一行。足够智能的是,一旦单个工作表的行数超过65,000行,就会创建一个新工作表,并从新工作表的第一行开始在该行继续。

对于我的一些较小的数据库查询(包括30,000行50列),这种方法很好用,但是我有一个查询返回125,000行以北,大约有50列,其中许多包含大量文本。

我可以构建电子表格,而不会出现问题,但是当我尝试将生成的电子表格流式传输到浏览器时,在调用OutOfMemoryException类的HSSFWorkbook方法时得到了Write。 (在内部,当Write方法调用该类的GetBytes方法时,会发生错误。)

如果运行调试器并在调用Write方法之前停止,则可以看到工作簿的Size属性返回的值(大约)为6500万。

在CodePlex的NPOI项目上已注意到此错误-参见标题为Out of Memory Problems的讨论-但不幸的是未找到解决方案。

为了完整起见,以下是引发异常的代码(特别是在workbook.Write行上引发)。

Using exportData As New MemoryStream()
workbook.Write(exportData)

Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("Content-Disposition", "Attachment;Filename=" & saveAsName)
Response.Clear()
Response.BinaryWrite(exportData.GetBuffer())
Response.End()
End Using

谢谢!

最佳答案

在这种情况下,我要记住FileStream对象不会引起错误,并且该错误是由32位的512MB容量限制和64位的2GB限制引起的,请尝试将文件写入memoryStream,错误,如果遇到错误,则还原为较大文件的FileStream。

这里有一个明显的性能折衷,但是如果您的用户正在下载> 2GB的文件,他们可能会希望这会慢一些:-)

有兴趣知道这是否适合您。

谢谢,
戴夫

关于asp.net - 生成大型Excel电子表格时出现OutOfMemoryException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6270430/

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