问题描述
|
我有以下被顺序调用的方法:
私有StringBuilder ReadPDF();
私人StringBuilder CleanText(StringBuilder sb);
私有void ParseText();
ParseText调用ReadPDF,后者调用CleanText;
我正在解析的PDF具有15MB的文本,使用常规的core 2 duo计算机需要10分钟才能从文件中提取所有数据。
如何并行处理这些任务?
编辑:只是为了澄清,阅读PDF需要很少的时间,问题在于解析提取的文本,更具体地说是在CleanText阶段。我需要并行化的原因是清理单个页面是即时的,但是清理2k +页需要很长时间。
解决方法
首先,您可能需要检查阅读PDF的方式。如果只有15MB,则除非您使用某种非常非常糟糕的解析方式,否则无需花10分钟即可读取。
其次,在找到更好的解析方式之后,应确保可以一次从所需的任何页面读取一个页面。之后,您将能够运行多个并行读取单个页面的任务。
, 逐页阅读PDF并使用流水线处理每一页。
http://blogs.msdn.com/b/pfxteam/archive/2010/04/14/9995613.aspx
就像之前的文章中提到的那样,您可能做错了什么。它只有15MB的PDF,阅读时间不需要10分钟。
, 正如Denis所说,您可以阅读部分文本,通常是一页,但是您可以将其分成较小的块,然后在阅读下一部分文本时对其进行处理。
如果您想了解有关并行编程的更多信息,可以在MSDN并行计算中心找到良好的信息和实验。
MDN也有一个.NET并行编程博客。
还有一本不错的书,由GastónHillar撰写,有C#专业并行编程:.NET 4的Master Parallel Extensions。