如何在并行线程中处理 System.Drawing.Font?

问题描述

我们使用并行线程每小时生成 1000 份审计报告。在生成时,我们使用 System.Drawing.Font 将文本写入 pdf(同步融合)。由于我们需要为每次审计使用不同的字体(8-10 种),这会导致生产服务器的内存显着增加。为了避免这种情况,我们尝试在将每个 pdf 保存到内存流后处理它们。

using (var loadedDocument = new PdfDocument()) 
{
    var indexPage = loadedDocument.Pages.Add();
    var header = indexPage.Graphics; 
    var calibri35Font = new Font("Calibri",35); 
    var calibri35PdfFont = new PdfTrueTypeFont(calibri35Font); 
    var stringCenterFormat = new PdfStringFormat { Alignment = PdfTextAlignment.Center }; 
    header.DrawString("AUDIT REPORT \n",calibri35PdfFont,PdfBrushes.Black,new PointF(250,50),stringCenterFormat);
    --------
    --------
    --------
    using (var stream = new MemoryStream())
    { 
        loadedDocument.Save(stream);
    } 
    calibri35Font.dispose(); 
    calibri35PdfFont.dispose();                        
} 

然而,由于并行线程尝试加载相同的字体,这会导致空异常问题。

问题是如何在不中断使用相同资源的并行进程的情况下安全地处理字体,以及是否有更好的方法解决内存问题。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)