IronPDF 导致内存泄漏
IronPDF Causing a Memory Leak
我正在使用 IronPDF 生成 PDF 文档。我的程序是一个托管在 IIS 上的 Web 应用程序,它使用 ChromePdfRenderer 使用 HTML 字符串呈现 PDF,并按顺序生成一堆文档。我注意到随着时间的推移,进程使用的总内存增加并最终崩溃。进一步调查显示非托管内存在生成 PDF 时不断增加。
我写了一个示例控制台应用程序来复制这个
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}");
}
}
HTML越大,内存使用增长得越快。这是内存分析器快照。
您可以看到非托管内存如何快速增长,但在大约 100 次迭代后仍未释放。我已经在 .NET Core 3.1 和 .NET Framework 上复制了它。
有没有其他人遇到过这个问题,你是如何解决的?
IronPDF 承认他们的 Chrome 渲染器存在内存泄漏,他们已经解决了这个问题。从版本 2021.11.4257 开始提供修复。
内存泄漏已在 2021-11-15 发布的 IronPdf 更新 2021.11.4257 中得到解决。
https://www.nuget.org/packages/IronPdf/2021.11.4257
- 修复了内存泄漏(见下面的附图)
- 添加 Installation.ChromeBrowserLimit
- 添加 AWS 支持。完整 Docker
设置教程在这里 -
https://iron.helpscoutdocs.com/article/115-aws-lambda-amazon-linux-2
(这还不包括对 AWS“层”的支持)
- 更新了异常消息,以允许开发人员诊断更多问题
- 几个小错误修复
我们的下一次更新会是什么?(已知问题):
将页眉和页脚应用于页数大于 30 的文档当前会导致问题,因此要成功地将页眉和页脚应用于页数大于 30 的文档,您必须添加 IronPdf.Installation.ChromeBrowserLimit = 50;
,其中“50”大于大型文档的预期页数。
内存泄漏多长时间了?
11 月 1 日左右在 IronPdf 2021.11.4183
为什么会这样?
我们的 Chrome 渲染器是相对较新的非托管专有代码。最近的更新导致内存泄漏,由于扩展性能分析不充分而未被捕获。
以后如何预防?
我们已经为我们的“持续集成”流程实施了扩展性能分析,以确保在将 IronPdf 发布到 public.
之前我们的托管和非托管代码性能都达到标准
2 个文件
我正在使用 IronPDF 生成 PDF 文档。我的程序是一个托管在 IIS 上的 Web 应用程序,它使用 ChromePdfRenderer 使用 HTML 字符串呈现 PDF,并按顺序生成一堆文档。我注意到随着时间的推移,进程使用的总内存增加并最终崩溃。进一步调查显示非托管内存在生成 PDF 时不断增加。
我写了一个示例控制台应用程序来复制这个
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}");
}
}
HTML越大,内存使用增长得越快。这是内存分析器快照。
您可以看到非托管内存如何快速增长,但在大约 100 次迭代后仍未释放。我已经在 .NET Core 3.1 和 .NET Framework 上复制了它。
有没有其他人遇到过这个问题,你是如何解决的?
IronPDF 承认他们的 Chrome 渲染器存在内存泄漏,他们已经解决了这个问题。从版本 2021.11.4257 开始提供修复。
内存泄漏已在 2021-11-15 发布的 IronPdf 更新 2021.11.4257 中得到解决。 https://www.nuget.org/packages/IronPdf/2021.11.4257
- 修复了内存泄漏(见下面的附图)
- 添加 Installation.ChromeBrowserLimit
- 添加 AWS 支持。完整 Docker 设置教程在这里 - https://iron.helpscoutdocs.com/article/115-aws-lambda-amazon-linux-2 (这还不包括对 AWS“层”的支持)
- 更新了异常消息,以允许开发人员诊断更多问题
- 几个小错误修复
我们的下一次更新会是什么?(已知问题):
将页眉和页脚应用于页数大于 30 的文档当前会导致问题,因此要成功地将页眉和页脚应用于页数大于 30 的文档,您必须添加 IronPdf.Installation.ChromeBrowserLimit = 50;
,其中“50”大于大型文档的预期页数。
内存泄漏多长时间了?
11 月 1 日左右在 IronPdf 2021.11.4183
为什么会这样?
我们的 Chrome 渲染器是相对较新的非托管专有代码。最近的更新导致内存泄漏,由于扩展性能分析不充分而未被捕获。
以后如何预防?
我们已经为我们的“持续集成”流程实施了扩展性能分析,以确保在将 IronPdf 发布到 public.
之前我们的托管和非托管代码性能都达到标准2 个文件