カスタムオブジェクトを最適化しています-> XMLシリアライゼーションユーティリティ、それはすべて完了して機能しており、それは問題ではありません。
ファイルをXmlDocument
オブジェクトにロードし、すべての子ノードを再帰的に通過することで機能しました。
XmlReader
全体をロード/解析する代わりに使用XmlDocument
する方が速いのではないかと考えたので、そのバージョンも実装しました。
アルゴリズムはまったく同じです。ラッパー クラスを使用して、 an と an を処理する機能を抽象化しXmlNode
ますXmlReader
。たとえば、GetChildren
メソッド yield は子XmlNode
または SubTreeを返しますXmlReader
。
そこで、重要なデータ セット (約 1,350 の要素を含む 900 KB の XML ファイル) を使用して、両方のバージョンをテストするためのテスト ドライバーを作成しました。
しかし、JetBrains dotTRACE を使用すると、XmlReader
実際にはバージョンがバージョンよりも遅いことがわかりますXmlDocument
。XmlReader
子ノードを繰り返し処理しているときに、読み取り呼び出しに関連する重要な処理がいくつかあるようです。
だから私はこれを尋ねるためにすべてを言います:
と の長所と短所はXmlDocument
何XmlReader
ですか? また、どのような状況でどちらを使用する必要がありますか?
私の推測ではXmlReader
、パフォーマンスがより経済的になり、メモリの消費量が少なくなるファイル サイズのしきい値があると思います。ただし、そのしきい値は 1MB を超えているようです。
ReadSubTree
子ノードを処理するために毎回呼び出しています:
public override IEnumerable<IXmlSourceProvider> GetChildren ()
{
XmlReader xr = myXmlSource.ReadSubtree ();
// skip past the current element
xr.Read ();
while (xr.Read ())
{
if (xr.NodeType != XmlNodeType.Element) continue;
yield return new XmlReaderXmlSourceProvider (xr);
}
}
このテストは、1 つのレベル (つまり、広くて浅い) で多くのオブジェクトに適用されますXmlReader
。つまり、私が扱っている XML は、データ オブジェクト モデル、1 つの親オブジェクトから多くの子オブジェクトなどによく似ています。1..M..M..M
また、解析している XML の構造が事前にわからないため、最適化できません。