カスタムオブジェクトを最適化しています-> 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 の構造が事前にわからないため、最適化できません。