类型' System.OutOfMemoryException'的例外情况发生在DocumentFormat.OpenXml.dll中

时间:2016-03-08 14:36:02

标签: c# asp.net excel openxml

我必须在excel中存储大约315k行数据,每行15列,并使其可供下载。我正在检索所有数据,然后将其存储在数据表中,然后使用OpenXml将其写入工作簿并发送响应。但由于数据量巨大,我得到异常System.OutOfMemoryException异常。

当我通过检索大约10万条记录来尝试时,整个过程正常运行没有任何错误。

我在SO上看到了类似的问题,但它是FileStream,因此MemoryStream的大小动态设置为

 MemoryStream memory = new MemoryStream(fileStream.size())

我想知道是否有办法用DataTable执行此操作。我相信逐行更新excel表是一个选项,但这将包括大量用于检查数据类型的代码等。

此外,我遇到了很多问题"文件已损坏"通过与此合作。因此,我更喜欢xlsx文件。

protected void DownloadDetailTable_OnClick(object sender, EventArgs e)
        {
            string value = ddl_AuditEnvironment.SelectedValue;
            String connectionString = ConfigurationManager.ConnectionStrings["stagingConnection"].ConnectionString;    
            // DataTable that stores the result set to be written on an excel. 
            DataTable dataTableObj = GetAuditData.GetDetailsTable(value, connectionString);

            string attachment = "attachment; filename=Summary.xlsx";
            DataTable dataTable = new DataTable();
            XLWorkbook workbook = new XLWorkbook();
            workbook.Worksheets.Add(dataTableObj, "Migrated Records");
            using (MemoryStream memory = new MemoryStream())
            {
                Response.Clear();
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                Response.AddHeader("content-disposition", attachment);
                workbook.SaveAs(memory);
                memory.WriteTo(Response.OutputStream);
                memory.Close();
                Response.End();
            }
        }

0 个答案:

没有答案