私は知っています、私はこれが死ぬまで行われたことを知っています。.NET 4以降を使用しているので、このソリューションがまだ適切かどうかを確認するために質問を投稿しています。
このリンクは、大きなXMLファイルを読み取る簡単な方法を説明しており、Linqを実装しています。私はこれがとても好きで、これがまだ関連しているのか、それとも新しい.NETコードにもっと良い実装があるのかを簡単に答えてほしいと思っています。
この質問への答えは.NET4でも変更されていません。最高のパフォーマンスを得るには、完全なものをメモリにロードする代わりに、ドキュメントをストリーミングするXmlReaderを使用する必要があります。
参照するコードXmlReader
は実際のクエリに使用されるため、大きなドキュメントではかなり高速である必要があります。
このように思われる場合:
<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();
この場合、ファイルサイズに制限はありません。
これを行う最良の方法は、 XmlReader.Createを使用して1行ずつ読み取ることです。
var reader = XmlReader.Create(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read())
{
// your code here.
}