DocumentFormat.OpenXml.dll中发生types“System.OutOfMemoryException”的exception

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

当我通过检索大约100klogging来尝试它时,整个工作正常,没有任何错误。

我在这里看到过类似的问题,但它是用FileStream ,因此MemoryStream的大小是dynamic设置的

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

我想知道是否有办法用DataTable来做到这一点。 我相信更新excel工作表逐行将是一个选项,但将包括检查数据types等的很多代码。

另外,通过与“File being corrupt”的合作,我遇到了很多问题。 因此,我更喜欢一个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(); } }