如何使用c#和并行扩展来并行化顺序任务?

时间:2011-05-27 15:32:36

标签: c# parsing parallel-processing task-parallel-library parallel-extensions

我有以下顺序调用的方法:

  1. private StringBuilder ReadPDF();
  2. private StringBuilder CleanText(StringBuilder sb);
  3. private void ParseText();
  4. ParseText调用调用CleanText的ReadPDF;

    我正在解析的PDF有15MB的文本,使用常规的核心2双核计算机从文件中提取所有数据需要10分钟。

    如何将这些任务并行化?

    编辑:只是为了澄清,阅读PDF只需要很少的时间,问题在于解析提取的文本,更具体地说是在CleanText阶段。我需要并行化的原因是清理单个页面是即时的,但清理2k +页面需要很长时间。

3 个答案:

答案 0 :(得分:2)

首先,您可能需要查看阅读PDF的方式。如果它只有15MB,那么读取它不需要10分钟,除非你使用了一些非常糟糕的解析方法。 其次,在你找到更好地解析它的方法之后,你应该确保你可以从你需要的任何页面一次读取一个页面。之后,您将能够运行多个并行读取单个页面的任务。

答案 1 :(得分:1)

逐页阅读​​PDF并使用Pipelining处理每个页面。

http://blogs.msdn.com/b/pfxteam/archive/2010/04/14/9995613.aspx

正如之前的帖子中提到的,可能你做错了什么。它只有15MB PDF,不应该花10分钟阅读它。

答案 2 :(得分:0)

正如Denis所说,您可以阅读部分文本,通常是一个页面,但您可以将其分成较小的块,然后在阅读下一部分文本时处理该文本。

如果您想了解有关并行编程的更多信息,可以在MSDN Parallel Computing center找到好的信息和实验。

MDN也有一个Parallel Programming with .NET blog

还有一本很好的书籍专业并行编程C#:带有.NET 4的Master Parallel ExtensionsbyGastónHillar