私は知っています、これは死に至りました。私が.NET 4以降を持っているので、このソリューションがまだ関連しているかどうかを確認する質問を投稿するだけです。C#と大きなXMLファイルを読む
This link大規模なXMLファイルを読み込む簡単な方法を説明しています。私はこれを非常に気に入っており、これがまだ関連しているか、より新しい.NETコードで実装されているかどうかを簡単な答えを述べたいだけです。
私は知っています、これは死に至りました。私が.NET 4以降を持っているので、このソリューションがまだ関連しているかどうかを確認する質問を投稿するだけです。C#と大きなXMLファイルを読む
This link大規模なXMLファイルを読み込む簡単な方法を説明しています。私はこれを非常に気に入っており、これがまだ関連しているか、より新しい.NETコードで実装されているかどうかを簡単な答えを述べたいだけです。
.NET 4では最高のパフォーマンスを得るために、XmlReaderとしてストリームを使用する必要があります。
参照するコードは実際のクエリにXmlReader
を使用していますので、大きなドキュメントではかなり速くする必要があります。
これを行う最善の方法は、XmlReader.Createを使用して1行ずつ読むことです。
var reader = XmlReader.Create(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read())
{
// your code here.
}
'XmlTextReader'は非推奨ですか? – user1096188
リンクされているドキュメントはどこにでも非難されているとは言わないので、私はそうは思わないでしょう。 – Chris
@ user1096188指摘してくれてありがとう、私は 'XmlReader.Create'を使うコードを更新しました。 – Ekk
それはこのように思える場合:
<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();
この場合、あなたが持っていますファイルサイズに制限はありません。
あなたがリンクしているサイトでわかるように、LINQ to XML *はXML文書を読み書きするのに最も簡単で速い方法です。 Infact LINQは* C#3.0 *で実装されており、コレクションやデータソースに対してクエリを書く強力な方法です。 –
@Fuex LINQ to XMLを使用すると、ドキュメント全体がメモリにロードされるため、コードを簡単に書き込むことはできますが、パフォーマンスが向上するわけではありません。しかし、リンクされた例では、LINQと組み合わせて 'XmlReader'を使用するので、かなりうまく動作します。 – James
@Jamesはい、私はあなたに同意します。大きなファイルを扱うときは、データ全体をメモリにロードすることが問題になり、クエリのパフォーマンスを調整します。したがって、* LINQ *と組み合わせて 'XmlReader'を使用するのは良い考えです。 –