我开始尝试使用多线程来处理CPU密集型批处理。基本上,我正在尝试将多个单页tiff文件压缩成单个PDF文档。使用foreach循环或标准迭代可以正常工作,但是对于包含数百页的文档可能会非常慢。我尝试了以下方法(基于我找到的一些示例)来使用多线程,它具有显着的性能提升,但会破坏页面顺序,而不是1,2,3,4,它将是1,3,4,2,6,5,取决于哪个线程先完成。
我的问题是,如何在保持页面顺序的同时利用这种技术,如果我可以做到,是否会抵消多线程的性能优势?谢谢您的帮助。
我的问题是,如何在保持页面顺序的同时利用这种技术,如果我可以做到,是否会抵消多线程的性能优势?谢谢您的帮助。
PdfDocument doc = new PdfDocument();
string mail = textBox1.Text;
string[] split = mail.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
int counter = split.Count();
// Source must be array or IList.
var source = Enumerable.Range(0, 100000).ToArray();
// Partition the entire source array.
var rangePartitioner = Partitioner.Create(0, counter);
double[] results = new double[counter];
// Loop over the partitions in parallel.
Parallel.ForEach(rangePartitioner, (range, loopState) =>
{
// Loop over each range element without a delegate invocation.
for (int i = range.Item1; i < range.Item2; i++)
{
f_prime = split[i].Replace(" " , "");
PdfPage page = doc.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
XImage image = XImage.FromFile(f_prime);
double x = 0;
gfx.DrawImage(image, x, 0);
}
});