并行化批处理应用程序

时间:2009-07-20 17:55:15

标签: c# .net xml parallel-processing

我目前正在开发一个解析大量XML文件的应用程序。

对于每个文件,将有不同的进程,但所有这些进程都将被解析为单个对象模型。

目前,从每个XML文件解析的对象将进入单个集合。

在解析过程中也使用此集合,例如如果类似的对象已经存在,它将改为修改对象的属性,例如添加count。

在运行此应用程序时查看CPU图表,很明显它只使用部分CPU(一次一个核心100%),因此我假设在并行运行它将有助于缩短运行时间。

我是并行编程的新手,所以感谢任何帮助。

3 个答案:

答案 0 :(得分:0)

我建议您考虑使用线程而不是并行编程。

Threading Tutorial

答案 1 :(得分:0)

我建议使用并行库,而不是尝试自己管理线程(这可能是一项艰巨的任务)。查看PLINQ/TPL了解.Net的内容。可以下载CTP here

答案 2 :(得分:0)

我建议您使用以下技术:构建一个等待处理的对象队列,并将它们从多个线程中出列:

  1. 创建一个XmlReader并开始逐节点地读取文件,而不是EOF。
  2. 遇到结束标记后,您可以将其内容序列化为对象。
  3. 将序列化对象放入队列。
  4. 验证队列中的对象数量,如果它大于N,则从ThreadPool中踢出一个新线程,该线程将从队列中取出< = N个对象并处理它们。
  5. 需要同步对队列的访问,因为您将从多个线程中排队对象并将其取消。

    难点在于找到N使得所有CPU核心同时工作。