3

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

  1. 私有 StringBuilder ReadPDF();
  2. 私有 StringBuilder CleanText(StringBuilder sb);
  3. 私人无效 ParseText();

ParseText 调用 ReadPDF 调用 CleanText;

我正在解析的 PDF 有 15MB 的文本,使用普通的 core 2 duo 计算机从文件中提取所有数据需要 10 分钟。

如何并行化这些任务?

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

4

3 回答 3

2

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

于 2011-05-27T15:37:10.827 回答
1

逐页阅读 PDF 并使用流水线处理每一页。

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

正如之前在一篇文章中提到的,您可能做错了什么。它只有 15MB 的 PDF,阅读它不应该花费 10 分钟。

于 2011-05-27T16:28:53.690 回答
0

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

如果您想了解更多关于并行编程的信息,您可以在MSDN 并行计算中心找到很好的信息和实验室。

MDN 也有一个.NET 的并行编程博客

还有一本好书 Professional Parallel Programming with C#: Master Parallel Extensions with .NET 4 by Gastón Hillar

于 2011-05-27T15:53:10.477 回答