Skip to content

Calling in. net8 webapi failed to free memory #132

@jinghun1999

Description

@jinghun1999

We used to generate pdf in .net5 in 2021, then we upgraded to .net6 in 2022 and upgraded to .net8 in 2024,But we found this caused failed to free memory in .net8. I don't know the problem caused by .net8 Or by the WkHtmlToPdf version.
The api called 10000 times maybe every day, the memory trend like this.
微信截图_20240712142639

code in my project below:

Startup.cs

services.AddSingleton<WkHtmlToPdfDotNet.Contracts.IConverter>(sp =>
{
    var logger = sp.GetService<ILogger<WkHtmlToPdfDotNet.Contracts.IConverter>>();
    var converter = new WkHtmlToPdfDotNet.SynchronizedConverter(new WkHtmlToPdfDotNet.PdfTools());
    converter.Warning += (sender, e) =>
    {
        logger.LogWarning(e.Message);
    };
    converter.Error += (sender, e) =>
    {
        logger.LogError(e.Message);
    };
    return converter;
});

ValueController.cs

private IConverter converter;
public ValueController(IConverter _converter) 
{
    converter = _converter;
}
[HttpGet]
public async Task<IActionResult> DownChainPdf()
{    
    var doc = new HtmlToPdfDocument()
    {
        GlobalSettings = {
            ColorMode = ColorMode.Color,
            Orientation = Orientation.Portrait,
            PaperSize = PaperKind.A4Plus,
        },
        Objects = {
            new ObjectSettings() {
                PagesCount = true,
                HtmlContent = html, // html string, 100kb
                WebSettings = { DefaultEncoding = "utf-8" },
                HeaderSettings = { FontSize = 9, FontName = "微软雅黑", Line = true, Spacing = 5, Left = $"Gen by:{model.User.UserName}{model.User.DisplayName}】", Right = $"Gen date:{model.ReportDate.ToOffset(TimeSpan.FromHours(8)).ToString("yyyy-MM-dd HH:mm:ss")}" },
                FooterSettings = { FontSize = 9, FontName = "微软雅黑", Line = true, Spacing = 5, Center = "[page] / [topage]" }
            }
        }
    };
    byte[] pdfData;
    await _PdfSlim.WaitAsync();
    try
    {
        pdfData = converter.Convert(doc);
    }
    finally
    {
        _PdfSlim.Release();
    }            
    Response.Headers.Append("Content-Disposition", "attachment; filename=\"output.pdf\"");
    return File(pdfData, "application/pdf", "output.pdf");
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions