17

現在、.Net フレームワークには、Xml 文字列を読み取るための (少なくとも) 4 つの異なる方法があります。XmlDocument、XmlReader、XPath、XElement のそれぞれを使用しましたが、コーディング時または実行時に使用するのに最も効率的なのはどれですか? それぞれが異なるタスク用に設計されていますが、長所と短所は何ですか?


更新: XmlReader を使用すると、xml を読み取る最も速い方法のように見えます。これは私には合理的に聞こえますが、制限があります。XmlDocument と XLinq で xml に非順次アクセスする場合のパフォーマンスの違いがあるかどうかを知りたいです。


更新: xml ドキュメントをロードするさまざまな方法を比較するいくつかの投稿を見つけました。XmlReader は最速です。LINQ to XML が前面に出てくる 10,000 以上のノードを持つドキュメントをロードするまで、XmlDocument と LINQ to XML の間にはわずかな違いがあります。

4

3 に答える 3

13

最も一般的な読み取り方法は次の 3 つです。

XmlDocument ファイル全体をツリー構造で読み取り、XPath を使用するか、すべてのノードを参照してアクセスできます。XML 構造全体をメモリにロードする必要があるため、非常に大きなファイルには多くのメモリが必要です。小さいファイル (数メガ以下) に使用するのは非常に優れており、簡単です。

XmlReader 高速ですが、シーケンシャルであるため、使用するのは本当に面倒です。前に戻る必要がある場合でも、元に戻すことはできません。また、XML 構造は通常、順序がばらばらになりがちです。また、終わりのない XML ストリームから読み取る場合は、おそらくこれが唯一の方法です。

XML シリアライザー これは基本的にすべてを行います。モデルのルート オブジェクトを提供すると、XML が作成されて読み取られます。ただし、構造をほとんど制御できず、オブジェクトの古いバージョンを読み取るのは苦痛です。したがって、これは永続化にはあまり適していません。

XDocument と LINQ to XML ダニエル・ストレートが指摘したように。しかし、私はコメントするほどそれを知りません。投稿を編集して不足している情報を追加するように誰でも招待します。


さて、書くことは別の話です。XmlDocument を維持するのは面倒ですが、XmlWriter は簡単に使用できます。

私の経験から言うと、XmlWriter を使用して書き込み、XmlDocument を使用して読み取るのが最適な組み合わせです。

于 2009-03-03T13:09:07.383 に答える
5

XDocument と LINQ to XML もありますが、プログラマーの時間に関しては、これが最も効率的だと私は考えています。

于 2009-03-03T13:29:09.287 に答える
4

最速のものはXmlTextReader. MSDN から:

"XML データへの高速で非キャッシュの順方向アクセスを提供するリーダーを表します。"

詳細はこちら: XmlTextReader クラス

どの「方法」が使用に最も適しているかを決定するのは、実際には問題に依存しますが。XML ファイルを 1 回だけ読み取る必要がある場合 (たとえば、いくつかのグローバル アプリ設定の読み取りとキャッシュなど)、XmlTextReader が最適です。ただし、これは順方向専用リーダーであることを忘れないでください。XML全体を検索/変更する必要がある場合は、おそらくXmlDocument Classを使用する必要があります。

于 2009-03-03T13:08:01.303 に答える