12

私は知っています、私はこれが死ぬまで行われたことを知っています。.NET 4以降を使用しているので、このソリューションがまだ適切かどうかを確認するために質問を投稿しています。

このリンクは、大きなXMLファイルを読み取る簡単な方法を説明しており、Linqを実装しています。私はこれがとても好きで、これがまだ関連しているのか、それとも新しい.NETコードにもっと良い実装があるのか​​を簡単に答えてほしいと思っています。

4

4 に答える 4

10

この質問への答えは.NET4でも変更されていません。最高のパフォーマンスを得るには、完全なものをメモリにロードする代わりに、ドキュメントをストリーミングするXmlReaderを使用する必要があります。

参照するコードXmlReaderは実際のクエリに使用されるため、大きなドキュメントではかなり高速である必要があります。

于 2012-10-17T10:07:33.707 に答える
10

このように思われる場合:

<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();

この場合、ファイルサイズに制限はありません。

于 2014-05-19T06:29:37.657 に答える
1

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

var reader = XmlReader.Create(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read())
{
    // your code here.
}
于 2012-10-17T10:17:11.753 に答える
0

私はここ数日から同じ問題に苦しんでいました。プロジェクトのプロパティを右クリックし、[ビルド]タブに移動して、[任意のCPU ]オプションを選択し、[ 32ビットを優先]オプションのチェックを外して、アプリを実行する前に保存します。同じスナップショットを添付しました。 ここに画像の説明を入力してください

于 2016-08-30T12:44:26.303 に答える