Как распараллелить последовательные задачи, используя c # и параллельные расширения? - PullRequest
3 голосов
/ 27 мая 2011

У меня есть следующий метод, который вызывается последовательно:

  1. private StringBuilder ReadPDF ();
  2. частный StringBuilder CleanText (StringBuilder sb);
  3. private void ParseText ();

ParseText вызывает ReadPDF, который вызывает CleanText;

Файл PDF, который я анализирую, содержит 15 МБ текста, и для извлечения всех данных из файла на обычном компьютере Core 2 Duo требуется 10 минут.

Как я могу распараллелить эти задачи?

edit: просто чтобы уточнить, что чтение PDF занимает очень мало времени, проблема заключается в разборе извлеченного текста, более конкретно на этапе CleanText. Причина, по которой мне нужно распараллелить, состоит в том, что очистка одной страницы происходит мгновенно, а очистка страниц размером более 2 000+ занимает много времени.

Ответы [ 3 ]

2 голосов
/ 27 мая 2011

Прежде всего, вам, вероятно, необходимо проверить, как вы читаете PDF.Если размер составляет всего 15 МБ, чтение не может занять 10 минут, если вы не используете ОЧЕНЬ ОЧЕНЬ плохой способ его анализа.Во-вторых, после того, как вы найдете способ лучше его проанализировать, вы должны быть уверены, что можете читать по одной странице за раз с любой страницы, которая вам нужна.После этого вы сможете параллельно запускать несколько задач чтения одной страницы.

1 голос
/ 27 мая 2011

Читайте PDF постранично и используйте конвейерную обработку для обработки каждой страницы.

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

И, как уже упоминалось в посте, вероятно, вы делаете что-то не так.Это ТОЛЬКО 15 МБ PDF, чтение не займет 10 минут.

0 голосов
/ 27 мая 2011

Как сказал Денис, вы можете прочитать часть текста, обычно страницу, но вы можете разбить ее на более мелкие блоки, а затем обработать этот текст, пока читаете следующую часть текста.

Если вы хотите узнать больше о параллельном программировании, вы можете найти хорошую информацию и лабораторные работы в Центре параллельных вычислений MSDN .

MDN также имеет параллельное программирование с блогом .NET .

Есть также хорошая книга Гастона Хиллара «Профессиональное параллельное программирование на C #: Master Parallel Extensions with .NET 4»

...