3

順番に呼び出される次のメソッドがあります。

  1. プライベートStringBuilderReadPDF();
  2. プライベートStringBuilderCleanText(StringBuilder sb);
  3. private void ParseText();

ParseTextは、CleanTextを呼び出すReadPDFを呼び出します。

私が解析しているPDFには15MBのテキストがあり、通常のCore2Duoコンピューターを使用してファイルからすべてのデータを抽出するのに10分かかります。

これらのタスクを並列化するにはどうすればよいですか?

編集:明確にするために、PDFを読むのにかかる時間はごくわずかです。問題は、抽出されたテキストの解析、より具体的にはCleanTextフェーズにあります。並列化する必要がある理由は、1つのページのクリーンアップは瞬時に行われますが、2k以上のページのクリーンアップには長い時間がかかるためです。

4

3 に答える 3

2

まず、PDFの読み方を確認する必要があります。15MBしかない場合は、非常に悪い解析方法を使用していない限り、読み取りに10分かかることはありません。第二に、それをよりよく解析する方法を見つけた後、あなたはあなたが必要とするどんなページからでも一度に一つのページを読むことができることを確認するべきです。その後、1つのページを並行して読み取る複数のタスクを実行できるようになります。

于 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ブログを使用した並列プログラミングもあります。

GastónHillarによる「C#を使用したプロフェッショナル並列プログラミング:.NET4を使用したマスター並列拡張」という優れた本もあります。

于 2011-05-27T15:53:10.477 に答える