Quantcast
Channel: ClosedXML - The easy way to OpenXML
Viewing all articles
Browse latest Browse all 1877

Commented Unassigned: system.memoryout of exception [9259]

$
0
0
Hi

I exporting around 50,000 rows to excel. I am using row grouping. I have lot of groupings. It works well for 20k rows but memory spikes a lot to atleast 1 gb. Its happening on the windows 2008 r2 servers with 24 gb ram

My data is lot of processed data before passing it to worksheet. This is the reason i am unable to provide data. Please let me know if there are any corrections i need to make to get it work

Thanks

using (var workbook = new ClosedXML.Excel.XLWorkbook())
{
var ws = workbook.Worksheets.Add(dt);
if (indentLevel == 2)
{

ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Style.Font.FontColor = XLColor.Red;
}
else if (indentLevel == 3)
{
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Style.Font.FontColor = XLColor.Blue;
}
else if (indentLevel == 4)
{
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Style.Font.FontColor = XLColor.ShockingPink;
}
else if (indentLevel == 5)
{
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Style.Font.FontColor = XLColor.Green;
}
else if (indentLevel == 6)
{
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Style.Font.FontColor = XLColor.Maroon;
}
else if (indentLevel == 7)
{
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Style.Font.FontColor = XLColor.Purple;
}
else if (indentLevel == 8)
{
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Group();
ws.Rows(pointer_string.ToString() + ":" + moving_string.ToString()).Style.Font.FontColor = XLColor.Orange;
}
}
catch (Exception ex)
{
string script = "<script type=\"text/javascript\">alert('No results to export to excel');</script>";
ClientScript.RegisterClientScriptBlock(this.GetType(), "Alert", script);
break;
}
}

for (int i = 0; i < dt.Rows.Count; i++)
{
ws.Cell(i + 2, 17).Style.Font.FontColor = XLColor.Blue;
ws.Cell(i + 2, 17).Style.Font.Underline = XLFontUnderlineValues.Single;
ws.Cell(i + 2, 17).Hyperlink = new XLHyperlink(ConfigurationSettings.AppSettings["url"].ToString() + "displaybss.aspx?partnumber=" + dt.Rows[i]["Prt No"].ToString() + "&partrev=" + dt.Rows[i]["Rev"].ToString());
}

//ws.Columns().AdjustToContents();
ws.Columns(maxlevel + 1, 15).Hide();
ws.Outline.SummaryHLocation = XLOutlineSummaryHLocation.Left;
ws.Outline.SummaryVLocation = XLOutlineSummaryVLocation.Top;


HttpResponse response = Response;
response.Clear();
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml";
response.AddHeader("content-disposition", "attachment;filename=Results.xlsx");

//MemoryStream MyMemoryStream = new MemoryStream();
using (MemoryStream MyMemoryStream = new MemoryStream())
{

workbook.SaveAs(MyMemoryStream);
response.Charset = "";
response.AddHeader("Content-Length", MyMemoryStream.Length.ToString());
response.BinaryWrite(MyMemoryStream.GetBuffer());
}

response.Flush();
response.OutputStream.Close();
response.End();
workbook.Dispose();
ws.Dispose();
ws = null;
GC.Collect();
GC.SuppressFinalize(workbook);
HttpContext.Current.ApplicationInstance.CompleteRequest();
}

}
Comments: ** Comment from web user: duncans **

Don't save the workbook to a MemoryStream because this - as the name suggests - loads the entire thing into memory, which is one of the things causing your OutOfMemoryException.

I suggest saving it to a temporary file on the file system then use Response.TransmitFile to send it. You will need to have some housekeeping task to tidy up the temporary files.


Viewing all articles
Browse latest Browse all 1877

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>