我们使用PuppeteerSharp为用户添加下载我们应用程序的功能。不幸的是,有时会启动大量的Chromium进程,直到服务器重新启动才会停止。
通常,当用户下载pdf时,5个铬进程开始,当下载完成时,这些进程消失。
这是我们的代码:
private static LaunchOptions launchOptions = new LaunchOptions
{
ExecutablePath = chromepath,
Headless = true,
DefaultViewport = ViewPortOptions
};
public static void ExportPdf(string url, string location)
{
try
{
Task<string> task = Task.Run<string>(async () => await ExportPdfASync(url, location)));
task.Wait();
}
catch (Exception)
{
// Exception handling
}
}
public static async Task<string> ExportPdfASync(string url, string location)
{
using (var browser = await Puppeteer.LaunchAsync(LaunchOptions))
using (var page = await browser.NewPageAsync())
{
await page.SetViewportAsync(new ViewPortOptions() { Width = 1440, Height = 990, IsMobile = false, DeviceScaleFactor = 1.0 });
await page.SetJavaScriptEnabledAsync(true);
await page.GoToAsync(url);
await page.WaitForTimeoutAsync(1500);
var marginOptions = new MarginOptions()
{
Top = "10mm",
Left = "10mm",
Right = "10mm",
Bottom = "10mm"
};
var pdfOptions = new PdfOptions()
{
PrintBackground = true,
Format = PaperFormat.A4,
MarginOptions = marginOptions,
Landscape = landscape
};
await page.PdfAsync(location, pdfOptions);
}
return "";
}浏览器和页面都在using块中,因此,即使出现错误,也应该将它们处理掉。
有谁有解决这个问题的办法吗?我们和我们的服务器将会非常高兴;)

发布于 2020-07-23 19:29:15
试试这个:
public static async Task<string> ExportPdfASync(string url, string location)
{
try
{
using (var browser = await Puppeteer.LaunchAsync(LaunchOptions))
using (var page = await browser.NewPageAsync())
{
await page.SetViewportAsync(new ViewPortOptions() { Width = 1440, Height = 990, IsMobile = false, DeviceScaleFactor = 1.0 });
await page.SetJavaScriptEnabledAsync(true);
await page.GoToAsync(url);
await page.WaitForTimeoutAsync(1500);
var marginOptions = new MarginOptions()
{
Top = "10mm",
Left = "10mm",
Right = "10mm",
Bottom = "10mm"
};
var pdfOptions = new PdfOptions()
{
PrintBackground = true,
Format = PaperFormat.A4,
MarginOptions = marginOptions,
Landscape = landscape
};
await page.PdfAsync(location, pdfOptions);
}
}
catch (Exception ex)
{
}
finally {
browser.CloseAsync();
page.CloseAsync();
}
return "";
}https://stackoverflow.com/questions/58372736
复制相似问题