C# Ghostscript.NET多线程问题

C# Ghostscript.NET多线程问题,c#,ghostscript,pdf-conversion,ghostscript.net,C#,Ghostscript,Pdf Conversion,Ghostscript.net,我们每月运行的过程中最长的部分是自动切片和将一些PDF转换为图像。每个PDF都被读入,转换成3个不同的PDF,这3个PDF被转换成图像,放在发给客户的电子邮件中。PDF是每个客户独有的,我们每月至少向15000(通常更像是2200)客户发送PDF 我们的PDF生成和切片已经是多线程的了,但我一直在研究如何并行化它的其余部分 为此,我将我们的过程转换为使用Ghostscript.NET,它声称是一个支持并行化Ghostscript的库 为此,我将此代码包装在一个并行的.Foreach()循环中,循

我们每月运行的过程中最长的部分是自动切片和将一些PDF转换为图像。每个PDF都被读入,转换成3个不同的PDF,这3个PDF被转换成图像,放在发给客户的电子邮件中。PDF是每个客户独有的,我们每月至少向15000(通常更像是2200)客户发送PDF

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

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

为此,我将此代码包装在一个并行的.Foreach()循环中,循环中的每个迭代都在不同的初始PDF上工作:

当我运行上述代码并强制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

@Aybe实例:我们使用的是最新版本的GhostScript。不幸的是,我已经看到了这个(相当令人失望的)问题:(您可能应该在CodePlex或GitHub存储库中问一个问题。我不是.NET开发人员,因此上面的代码对我来说毫无意义,但我可以说,尽管Ghostscript能够进行多线程渲染,但它无法执行多线程解释。如果您想同时处理多个输入文件,则需要多个进程要执行此操作,您不能使用同一个Ghostscript实例处理多个输入文件。为什么需要while(processor.IsRunning),StartProcessing不阻止该进程?
GhostscriptVersionInfo gsVersionInfo = GhostscriptVersionInfo.GetLastInstalledVersion(GhostscriptLicense.GPL | GhostscriptLicense.AFPL, GhostscriptLicense.GPL);