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但没有任何帮助.
谢谢你的关心..。
发布于 2014-10-07 14:06:14
你在什么环境下运行?如果是32位,您可以在aprox获得OutOfMemoryException。500 memory内存流
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。
发布于 2014-10-07 13:57:17
下面的代码没有添加任何内容,所以您可以放手:
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。
https://stackoverflow.com/questions/26237587
复制相似问题