2012-10-17 14 views
6

私は知っています、これは死に至りました。私が.NET 4以降を持っているので、このソリューションがまだ関連しているかどうかを確認する質問を投稿するだけです。C#と大きなXMLファイルを読む

This link大規模なXMLファイルを読み込む簡単な方法を説明しています。私はこれを非常に気に入っており、これがまだ関連しているか、より新しい.NETコードで実装されているかどうかを簡単な答えを述べたいだけです。

+0

あなたがリンクしているサイトでわかるように、LINQ to XML *はXML文書を読み書きするのに最も簡単で速い方法です。 Infact LINQは* C#3.0 *で実装されており、コレクションやデータソースに対してクエリを書く強力な方法です。 –

+2

@Fuex LINQ to XMLを使用すると、ドキュメント全体がメモリにロードされるため、コードを簡単に書き込むことはできますが、パフォーマンスが向上するわけではありません。しかし、リンクされた例では、LINQと組み合わせて 'XmlReader'を使用するので、かなりうまく動作します。 – James

+0

@Jamesはい、私はあなたに同意します。大きなファイルを扱うときは、データ全体をメモリにロードすることが問題になり、クエリのパフォーマンスを調整します。したがって、* LINQ *と組み合わせて 'XmlReader'を使用するのは良い考えです。 –

答えて

5

.NET 4では最高のパフォーマンスを得るために、XmlReaderとしてストリームを使用する必要があります。

参照するコードは実際のクエリにXmlReaderを使用していますので、大きなドキュメントではかなり速くする必要があります。

1

これを行う最善の方法は、XmlReader.Createを使用して1行ずつ読むことです。

var reader = XmlReader.Create(filename); 
reader.WhitespaceHandling = WhitespaceHandling.None; 
while (reader.Read()) 
{ 
    // your code here. 
} 
+2

'XmlTextReader'は非推奨ですか? – user1096188

+1

リンクされているドキュメントはどこにでも非難されているとは言わないので、私はそうは思わないでしょう。 – Chris

+0

@ user1096188指摘してくれてありがとう、私は 'XmlReader.Create'を使うコードを更新しました。 – Ekk

4

それはこのように思える場合:

<root> 
    <item>...</item> 
    <item>...</item> 
    ... 
</root> 

あなたはXmlReaderでファイルを読み込むことができ、各 '項目' は、このようなXmlDocumentで開く:

reader.ReadToDescendant("root"); 
reader.ReadToDescendant("item"); 

do 
{ 
    XmlDocument doc = new XmlDocument(); 
    doc.LoadXml(reader.ReadOuterXml()); 
    XmlNode item = doc.DocumentElement; 

    // do your work with `item` 
} 
while (reader.ReadToNextSibling("item")); 

reader.Close(); 

この場合、あなたが持っていますファイルサイズに制限はありません。

+0

非常に良い提案! – Haukman

+0

このコードは間違っています。最初の項目、次に3番目の項目などを読み込みます。 – GreenGood

+0

@GreenGood、Not incorrect!このコードを何度もテストしたところ、正しく動作します。 'reader.ReadToDescendant( "item");' 'reader.ReadOuterXml()'は現在の要素を読み込み、 'reader.ReadToNextSibling( "item")'は次の要素に移動します。 –

0

私は最後の数日から同じ問題で苦労していました。私はちょうど右、その後、[ビルド]タブと選択オプションどれCPUに移動上のプロジェクトのプロパティをクリックしチェックを外しオプションは、32ビットを優先して、あなたのアプリケーションを実行する前に保存ダニ、それは私を助けました。私は同じスナップショットを添付しています。 enter image description here

関連する問題