首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编写excel时的System.OutOfMemoryException

编写excel时的System.OutOfMemoryException
EN

Stack Overflow用户
提问于 2014-10-07 13:48:36
回答 2查看 4.3K关注 0票数 1
代码语言:javascript
运行
复制
        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 ..。

有没有增加内存流容量的方法?当我在excel上写500000张唱片的时候,我得到了System.OutOfMemoryException,但是多达400000的记录很好。我发现了几个类似的问题,但没有找到解决这个问题的可靠办法.有人建议用

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

谢谢你的关心..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-07 14:06:14

你在什么环境下运行?如果是32位,您可以在aprox获得OutOfMemoryException。500 memory内存流

代码语言:javascript
运行
复制
    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位”。关闭项目属性中的开关:

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

票数 1
EN

Stack Overflow用户

发布于 2014-10-07 13:57:17

下面的代码没有添加任何内容,所以您可以放手:

代码语言:javascript
运行
复制
    workbookStream.Flush()       ' Does nothing
    workbookStream.Position = 0  ' Does nothing

但剩下的都是记忆的问题。你需要更多的工作内存(RAM)来完成你想要做的事情。所以如果你在机器上增加内存,你应该可以.除非你有一个32位的机器,并运行到3GB的实际内存限制。在这种情况下,您需要升级到64位计算机,这样内存限制就不是问题了。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26237587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档