2009-07-20 3 views
0

В настоящее время я работаю над приложением, которое анализирует огромные XML-файлы.Parallelize A Batch Application

Для каждого файла будут разные процессы, но все они будут проанализированы в одну объектную модель.

В настоящее время объекты, проанализированные из каждого XML-файла, войдут в одну коллекцию.

Эта коллекция также используется во время разбора, например. если подобный объект уже существует, он изменит свойство объекта, например, добавит счет.

Рассматривая график CPU, когда это приложение работает, ясно, что он использует часть процессора (только одно ядро ​​за один раз на 100%), поэтому я предполагаю, что запуск его на параллельной основе поможет сократить время работы ,

Я новичок в параллельном программировании, поэтому любая помощь приветствуется.

+0

Когда вы говорите, что эти XML-файлы будут проанализированы в одну объектную модель, вы имеете в виду, что они будут загружены в память? Если да, то что вы собираетесь делать с этой объектной моделью? Редко полезно загружать что-то в память, если это не выполнение некоторых операций/преобразований на нем, а затем сохранение в другом месте. –

+0

@ darin После разбора будут дополнительные процессы. Но это не в контексте этого вопроса. –

ответ

0

Я хотел бы предложить Вам следующую технику: построить очереди объектов, которые ждут, чтобы быть обработаны и из очереди их из нескольких потоков:

  1. Создайте XmlReader и начать чтение узла файла узлом, а не EOF.
  2. Как только вы сталкиваетесь с закрывающим тегом, вы можете сериализовать его содержимое в объект.
  3. Поместите сериализованный объект в очередь.
  4. Проверьте количество объектов в очереди и, если оно больше N, вытащите новый поток из ThreadPool, который выведет < = N объектов из очереди и обработает их.

Доступ к очереди должен быть синхронизирован, так как вы будете ставить в очередь и деактивировать объекты из нескольких потоков.

Трудность заключается в нахождении N, так что все ядра ЦП работают одновременно.

0

Я предлагаю вам использовать потоки вместо параллельного программирования.

Threading Tutorial

+0

и общая память, без сомнения. – Alex

+1

Темы - один из способов параллельного программирования. –

0

Вместо того, чтобы пытаться удалось резьб себя (что может быть сложной задачей), я предлагаю использовать параллельную библиотеку. Посмотрите на PLINQ/TPL на то, что входит .Net. CTP можно загрузить here.

 Смежные вопросы

  • Нет связанных вопросов^_^