0

我正在使用 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 越大,内存使用量增长得越快。这是内存分析器快照。

dotMemory 配置文件

您可以看到非托管内存如何快速增长,但在大约 100 次迭代后仍未释放。我已经在 .NET Core 3.1 和 .NET Framework 上重现了这一点。

有没有其他人有这个问题,你是如何解决这个问题的?

4

2 回答 2

2

IronPDF 承认他们的 Chrome 渲染器存在内存泄漏,他们已经解决了这个问题。从版本 2021.11.4257 开始提供修复。

于 2021-11-16T21:15:27.657 回答
0

内存泄漏已在 IronPdf 更新 2021.11.4257(于 2021 年 11 月 15 日发布)中得到解决。 https://www.nuget.org/packages/IronPdf/2021.11.4257

我们的下一次更新将包含什么内容?(已知的问题):

将页眉和页脚应用于页数大于 30 的文档当前会导致问题,因此要成功地将页眉和页脚应用于页数大于 30 的文档,您必须添加IronPdf.Installation.ChromeBrowserLimit = 50;“50”大于预期页数的位置您的大文档。

内存泄漏多久了?

11 月 1 日左右 IronPdf 2021.11.4183

为什么会这样?

我们的 Chrome 渲染器是相对较新的非托管专有代码。最近的更新导致内存泄漏,由于扩展性能分析不足,未捕获该泄漏。

将来如何防止这种情况发生?

我们已经为我们的“持续集成”流程实施了扩展的性能分析,以确保在向公众发布 IronPdf 之前,我们的托管和非托管代码性能都达到标准。

2 个文件 确认 2021.11.4183 内存泄漏内存泄漏已在 2021.11.4257 中修复

于 2021-11-17T01:17:11.367 回答