2009-10-11 17 views
10

XMLを読むためにXMLReader.Createnew XMLTextReader()の違いを知りたいと思います。なぜ私はもう一方を選ぶだろうか?
パフォーマンスに違いがありますか?XMLReader.Create()と新しいXMLTextReader()の違い

私はXMLReaderがXMLTextReaderの抽象型であることを知っていますが、これは少なくとも私が以前に読んだものですが、新しいXMLReader()インスタンスではなくXMLReader.Create()

ありがとうございます...

よろしくお願いいたします。

答えて

13

XmlReader.Createを指定すると、XmlReaderSettingsを指定できますが、XmlTextReaderコンストラクタのどれもオーバーロードしません。

+0

ありがとう、それは私の多くを助けた。 – Tarik

+0

これは唯一の違いではないようですが、XmlReader.Createを設定することはできませんが、XmlTextReaderは問題なく動作します。 http://stackoverflow.com/questions/34257204/different-behaviour- between-new-xmltextreader-and-xmlreader-create –

1

なぜこの種のコードが好きなのかの一般的な回答については、Factory Method Patternをご覧ください。ファクトリメソッドと抽象クラス/インターフェイスを使用すると、特定の実装に縛られることなく、より一般的なコードを書くのに役立ちます。これにより、コードをより簡単に新しい機能を利用したり、さまざまな状況で使用することができます。

+0

ありがとう、私はそれを知らなかった。 – Tarik

+0

* sarcasm on * ああ、そうです。それは、複数の環境で些細なバグを見つけることを本当に喜ばしくします。 –

+1

真剣に。ただの警告の言葉:ファクトリーパターンはすぐに悪化し、マスターをオンにすることができます。まず、コンパイル時の安全性がすぐに緩和されます。第二に、多くのバージョンに対する一貫性を維持することは非常に苦痛になる可能性があります。私は、システムの主要な設計上の欠陥の中で、工場パターンが必要になったケース(私のうちのいくつかは;-))を見たことがあります。 私は間違ってはいませんが、私が言っているのは、いくつかの状況では何かを隠す最善の方法かもしれないということですが、他の人にはちょうど知りたいことがあります:-) –

3

Microsoftの答えは単純です:

は、Microsoft .NET Framework 2.0のリリースでのXmlWriterクラスの実装でてXmlTextWriterクラスを、含まれていますが、あなたが新しい作成するために、Createメソッドを使用することをお勧めしますXmlWriterオブジェクト。 Createメソッドを使用すると、作成されたXmlWriterオブジェクトでサポートする機能を指定できます。また、2.0リリースで導入された新機能をフルに活用できます。

が、その答えは、最も重要な違いが出て葉:

あなたは「新しいXmlTextReaderクラス」と呼ぶならば、潜在的に、それは特定のケースで非常に悪いストリーミング挙動を有することになりますどの、「v1compat」モードに設定されます。 OutOfMemoryExceptionsにつながる!詳細については、Why is my new XmlTextReader(stream) reading in many megabytes into memory rather than streaming properly?を参照してください。

推奨事項:.NET 1.1の動作が本当に必要な場合を除き、「XmlReader.Create」を呼び出すのではなく、「new XmlTextReader」を呼び出すべきではありません。

+0

XmlReaderを "v1compat "モード? –

関連する問題