2009-07-20 16 views
0

現在、巨大なXMLファイルを解析するアプリケーションを開発中です。バッチアプリケーションの並列化

ファイルごとに異なるプロセスがありますが、すべてが単一のオブジェクトモデルに解析されます。

現在、各XMLファイルから解析されたオブジェクトは、単一のコレクションに入れられます。

このコレクションは、解析中にも使用されます。同様のオブジェクトがすでに存在する場合は、カウントの追加など、オブジェクトのプロパティを変更します。

このアプリケーションが動作しているときのCPUグラフを見ると、CPUの一部(一度に1つのコアは100%)しか使用していないことがわかります。したがって、並列実行すると、 。

私は並列プログラミングには新しく、どんな助けにも感謝しています。

+0

これらのXMLファイルを1つのオブジェクトモデルに解析すると、それらがメモリにロードされることを意味しますか?もしそうなら、このオブジェクトモデルで次に何をするつもりですか?いくつかの操作/変換を実行せずに他の場所に保存するのであれば、メモリにロードすることはめったに役に立ちません。 –

+0

@darin解析後に追加のプロセスがあります。しかし、それはこの質問の文脈ではありません。 –

答えて

0

私はあなたに次のような手法を示唆している:のXmlReaderを作成していないEOFながらノードでファイルノードを読み始める

  1. :処理されるのを待つオブジェクトのキューを構築し、複数のスレッドからそれらをデキューします。
  2. 終了タグが見つかると、内容をオブジェクトにシリアル化することができます。
  3. シリアライズされたオブジェクトをキューに入れます。
  4. キュー内のオブジェクトの数を確認し、Nより大きい場合、キューから< = N個のオブジェクトをデキューして処理するThreadPoolから新しいスレッドをキックして処理します。

複数のスレッドからオブジェクトをエンキューおよびデキューするので、キューへのアクセスを同期する必要があります。

難点は、すべてのCPUコアが同時に動作するようにNを見つけることです。

0

並列プログラミングの代わりにスレッドを使うことをお勧めします。 (困難な作業となることができ)

Threading Tutorial

+0

と共有メモリ、間違いなく。 – Alex

+1

スレッドは、並列プログラミングを行う1つの方法です。 –

0

の代わりに自分自身をスレッドに管理しようと、私は並列ライブラリを使用することをお勧め。 .Netに来るものについてはPLINQ/TPLを見てください。 CTPはhereからダウンロードできます。