gpt4 book ai didi

c# - Ghostscript.NET 多线程问题

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:47 32 4
gpt4 key购买 nike

我们每月运行的流程中最长的部分是将一些 PDF 自动切片和转换为图像。读入每个 PDF,将其转换为 3 个不同的 PDF,然后将这 3 个转换为图像以放入电子邮件中发送给客户。每个客户的 PDF 都是唯一的,我们每月向至少 15,000 名(通常​​更接近 22,000 名)客户发送 PDF。

我们的 PDF 生成和切片已经是多线程的,但我一直在研究并行化它的其余部分。

为此,我已将我们的流程转换为使用 Ghostscript.NET,它声称是一个支持并行化 Ghostscript 的库。

为此,我将这段代码包装在一个 Parallel.Foreach() 循环中,其中循环中的每次迭代都处理不同的初始 PDF:

      GhostscriptVersionInfo gsVersionInfo = GhostscriptVersionInfo.GetLastInstalledVersion(GhostscriptLicense.GPL | GhostscriptLicense.AFPL, GhostscriptLicense.GPL);

GhostscriptProcessor processor = null;

try
{
//sArgs is an array of arguments for ghostscript
processor = new GhostscriptProcessor(gsVersionInfo, true);
processor.StartProcessing(sArgs, new ConsoleStdIO(true,false,true));
while (processor.IsRunning)
{
Thread.Sleep(100);
}
}

当我运行上述代码并强制 Parallel.Foreach 仅使用 1 个线程(禁用并行化)时,它会像以前一样运行并正确生成所有文件。如果我使用 5 度并行化,它就会开始抛出错误。这些错误各不相同,但往往表明输入的 PDF 文件格式不正确,这让我认为 ghostscript 处理器实际上并不是线程安全的,并且正在踩踏彼此的输入。

如何正确使用 Ghostscript.NET 同时在不同文件上运行多个 ghostscript 实例?

最佳答案

我正在使用具有多线程的 Ghostscript.NET。您在上面共享的代码应该在 Parallel.For 循环内。是的,整个代码意味着从

开始
GhostscriptVersionInfo gsVersionInfo = GhostscriptVersionInfo.GetLastInstalledVersion(GhostscriptLicense.GPL | GhostscriptLicense.AFPL, GhostscriptLicense.GPL);

直到最后它应该工作。正如@KenS 上面提到的,每个多线程进程都应该使用不同的 GhostscriptProcessor 实例。

关于c# - Ghostscript.NET 多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26917330/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com