2011-08-08 8 views
0

ディスク上のXMLファイルのソートされたチャンクに対してマージソートを実行しようとしています。彼らがすべて記憶に収まる機会はありません。私のXMLファイルはレコードで構成されています。ディスクからXMLを1度に1つのレコードでメモリに読み取る

私はn個のXMLファイルがあります。十分なメモリがあれば、各ファイルの内容全体を対応するQueue、各ファイルの1つのキューに読み込み、各キューの各項目のタイムスタンプを比較し、最小のタイムスタンプを持つものを別のファイル(マージファイル) 。この方法で、すべての小さなファイルを1つの大きなファイルにマージし、すべてのエントリを時間ソートします。

問題は、XDocumentの.Parseメソッドに後で渡すために.ReadToEndを使用してすべてのXMLを読み取るための十分なメモリがないことです。

読み込み済みのXElementを覚えているXElement属性「TimeStamp」を比較する次のパスで各キューを満たすために十分なレコードを読み込むクリーンな方法はありますか?

ありがとうございます。

答えて

0

linq to xml apiが好きな場合はthis codeplex projectが必要です。

+0

Jan、ありがとう、それは私が探していたものです。どのくらいのコードがこの種のものを廃止するのか驚くべきことです。 – Ivan

+0

ようこそ。左の緑色のチェックマークをクリックすると、これを答えとしてマークすることができます。これまでの質問にもそうすることができます。 –

1

XmlReaderはあなたが探しているものです。

高速でキャッシュされていない、転送専用XMLデータへのアクセスを提供するリーダー を表します。

+0

XMLReaderはどのような方法を使用していますか?私が言うことができる限り、 "ReadOneRecord"メソッドはありません。 – Ivan

1

これは流行していませんが、これはまさにSAXで解決された問題です。 XML用のシンプルなAPIで、コールバックに基づいています。読み取り操作を開始すると、レコードごとにコードが呼び出されます。これは、プログラムがXMLファイル全体(ala XMLDocument)にロードする必要がないため、オプティオインになる可能性があります。 Google SAX

関連する問題