I am using IronPDF to generate PDF documents. My program is a web app hosted on IIS that uses ChromePdfRenderer to render PDF using an HTML string, and it sequentially generates a bunch of documents. I noticed over time, total memory used by the process increases and ultimately crashes. Further investigation showed the unmanaged memory keeps increasing as it generates PDFs.
I wrote a sample console app to replicate this
public class PdfBenchmark{
private static readonly ChromePdfRenderOptions ChromePdfRenderOptions = new ChromePdfRenderOptions
{
PaperSize = IronPdf.Rendering.PdfPaperSize.Letter,
CssMediaType = IronPdf.Rendering.PdfCssMediaType.Screen,
PrintHtmlBackgrounds = true,
FitToPaper = true,
EnableJavaScript = true,
RenderDelay = 200,
Timeout = 60
};
public async Task<Stream> SimplePdf()
{
var renderer = new IronPdf.ChromePdfRenderer()
{
RenderingOptions = ChromePdfRenderOptions
};
renderer.RenderingOptions.HtmlHeader.MaxHeight = 25;
renderer.RenderingOptions.HtmlHeader.DrawDividerLine = false;
renderer.RenderingOptions.HtmlHeader.HtmlFragment = HeaderHTML;
renderer.RenderingOptions.HtmlFooter.MaxHeight = 12;
renderer.RenderingOptions.HtmlFooter.DrawDividerLine = true;
renderer.RenderingOptions.HtmlFooter.HtmlFragment = FooterHTML;
using (var x = await renderer.RenderHtmlAsPdfAsync("<h1>Html with CSS and Images and js</h1>"))
{
return x.Stream;
}
}
public const string FooterHTML = @"<div class='container-fluid'>some html</div>";
public const string HeaderHTML = @"<div class='container'>
<div class='row header d-flex justify-content-between'>
<div class='col-md-1 logo'>
</div>
<div class='col text-end right'>
<div>>some HTML content</div>
</div>
</div>
</div>";
}
}
static async Task Main(string[] args)
{
var x = new PdfBenchmark();
for (int i = 0; i < 200; i++)
{
using var stream = await x.SimplePdf();
//Do whatever I want here...
Console.WriteLine($"Created doc#: {i}");
}
}
the larger the HTML, the quicker the memory usage grows. Here's the memory profiler snapshot.
You can see how unmanaged memory grew fast, but wasn't released after about 100 iterations. I've reproduced this on .NET Core 3.1 and .NET Framework.
Has anyone else had this issue and how did you resolve this?
IronPDF acknowledged there was a memory leak in their Chrome renderer and they've fixed the issue. Fix is available from version 2021.11.4257 onwards.