Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Calling in. net8 webapi failed to free memory #132

Open
jinghun1999 opened this issue Jul 12, 2024 · 5 comments
Open

Calling in. net8 webapi failed to free memory #132

jinghun1999 opened this issue Jul 12, 2024 · 5 comments

Comments

@jinghun1999
Copy link

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");
}
@HakanL
Copy link
Owner

HakanL commented Jul 12, 2024

It's hard to know exactly what could cause it, but the GC process is a little different in .NET8 vs earlier versions, so maybe that's related. The WkHtmlToPdf package doesn't have specific builds for .NET8, so it's odd that it would be related.

@jinghun1999
Copy link
Author

@han
Thanks a lot. May you test it in .net8, and if it show you the memory issue and can repair it , that's very important and amazing for us.

@HakanL
Copy link
Owner

HakanL commented Jul 15, 2024

@han Thanks a lot. May you test it in .net8, and if it show you the memory issue and can repair it , that's very important and amazing for us.

I run it in .NET8, but I don't have good test set up for memory leak testing. We welcome PRs though :)

@HakanL
Copy link
Owner

HakanL commented Jul 17, 2024

See this as well: #129

@HakanL
Copy link
Owner

HakanL commented Jul 17, 2024

Also see this: #114

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants