2009-05-13 18 views
5

私たちが開発しているアプリケーションの1つでは、多くのXML処理を行います。現在、ほとんどの処理でDOMとXPathを使用していますが、パフォーマンスにはあまり満足していません。Linq to XMLとDOMとの比較

現時点では、XML処理ロジックをLINQに移行することを検討しており、最初の調査では、LINQのパフォーマンスはDOMよりも優れていることが示されています。

これらの変更を行う前に、他の人がこのことについてどのように感じているか知りたいと思います。 LINQを使用していますか?どれdisavantagesなどが...

おかげで、 Shamika


は、あなたの答えをありがとうございました。私はいくつかのパフォーマンステストを行い、予想通りXmlDocumentとLINQの両方を実行するXmlReaderを実行しました。これはXMLの読み取り専用です。

LINQの使い易さが必要な場合は、XmlReaderのいくつかの機能を使用してLINQ XML処理を実装でき、XmlDocumentよりもはるかに優れたパフォーマンスを得ることができます。詳細については、「rwwilden」コメントを参照してください。

ありがとうございました。

+0

この質問を見てください:http:// stackoverflow。co.jp/questions/182976 –

答えて

1

LINQ - > XMLは、DOMよりも使いやすく、使いやすくなっています。私には直感的で、IMOを読むのがはるかに簡単です。

2

DOM/XPathの代わりにLINQ2XMLを使用すると、非常に大きなパフォーマンス向上が見られるかどうかはわかりません。 DOMとLINQ2XMLの両方について、反復処理するドキュメントはメモリ内ツリーとして表されます。

実際にパフォーマンスが問題になり、かなり大きなXMLドキュメントがある場合は、フレームワークに実装されている基本的なXMLストリーミングサポートをご覧ください(XStreamingElement経由)。また、Microsoft XMLチームblog entryをチェックしてください。

3

豊富なナビゲーションサポート(すべての参照が追加され始めます)のために、DOM(すなわち、System.Xml.XmlDocument)の使用が遅くなる可能性が高く、ノードの数が増えるほどこのオーバーヘッドが大きくなります。

単純なオブジェクトモデル(System.Xml.Linq.XDocumentおよびSystem.Xml.XPath.XPathDocument)は複雑な構造を持ちませんが、他の手段によるナビゲーションが可能です。これにより、CPUのオーバーヘッドが増えますが、メモリを節約する必要があります。

最終的には、あなたのケースでプロファイル(時間とスペース)を取る必要があります。また、実際の(ユーザーが知覚した)違いの程度を考慮する必要があります。

しかし、究極のパフォーマンスを得るには、文書全体をメモリにロードしないでください。System.Xml.XmlReaderSystem.Xml.XmlWriterを使用し、ストリーム内のすべてを実行します。もちろんこれは開発コストを追加します。

.NETには豊富なXML APIセットがあります。これはあなたに最適なトレードオフを決めることによってのみ決めることができます。

個人的に私はどこXmlReader/XmlWriter正当化するためのパフォーマンス向上を十分に与えるものではありません(特に作成する)XmlDocumentを回避しXPathDocument(特に読み、およびXPathを使用してクエリするため)またはXDocumentのいずれかを使用します。