写入excel时出现System.OutOfMemoryException

时间:2014-10-07 13:48:36

标签: asp.net-mvc vb.net excel out-of-memory memorystream

        Public Function GenerateReportAsExcel()
        Dim workbook = WorkbookFactory.Create(template)
        template.Close()
        Dim worksheet = workbook.GetSheetAt(0)

    //           Writing record to worksheet


        Dim workbookStream = New MemoryStream()
        workbookStream.Flush()
        workbookStream.Position = 0
        workbook.Write(workbookStream)  //throws error if the rocord is more then 500000...runs fine for 400000 

        Return New MemoryStream(workbookStream.ToArray())
    End Function

WorkbookFactory正在使用NPOI.SS.UserModel ....

有没有办法增加内存流容量?我正在获取System.OutOfMemoryException,同时将500000记录写入excel但最多400000记录工作正常。 我发现了几个类似的问题,但没有得到任何可靠的解决方案... 有人建议使用

workbookStream.Flush() workbookStream.Position = 0 但没有任何帮助......

感谢您的关注..

2 个答案:

答案 0 :(得分:1)

您在运行什么环境? 如果是32位,则在aprox处获得OutOfMemoryException。 500meg内存流。

    static void Main(string[] args)
    {
        var buffer = new byte[1024 * 1024];
        Console.WriteLine(IntPtr.Size);
        using (var memoryStream = new MemoryStream())
        {
            for (var i = 0; i < 100000000; i++)
            {
                try
                {
                    memoryStream.Write(buffer, 0, 1024);
                }
                catch (OutOfMemoryException e)
                {
                    Console.WriteLine("Out of memory at {0} meg", i);
                    break;
                }
            }
        }
        Console.ReadKey();
    }

如果您在64位操作系统上运行,请确保使用“首选32位”关闭来构建。 关闭项目属性中的开关:

enter image description here

我建议在这里使用FileStream而不是MemoryStream。

答案 1 :(得分:0)

以下代码不添加任何内容,因此您可以放手:

    workbookStream.Flush()       ' Does nothing
    workbookStream.Position = 0  ' Does nothing

但剩下的就是记忆问题。您需要更多工作内存(RAM)才能完成您要执行的操作。因此,如果您将RAM内存添加到计算机中,您应该很高兴...除非您拥有32位计算机并且遇到3GB实际RAM限制。在这种情况下,您需要升级到64位机器,此内存限制不是问题。

但是如果要生成Excel文件,您可能希望查看ClosedXML而不是使用Excel对象模型。这是一个在您的计算机上不需要Excel的库。看看http://www.campusmvp.net/blog/generating-excel-files-like-a-pro-with-closedxml