微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在并行线程中处理 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 举报,一经查实,本站将立刻删除。