Разница между XMLReader.Create() и новым XMLTextReader()

Я хотел бы узнать разницу между XMLReader.Create и new XMLTextReader() для чтения XML. Почему я должен выбирать один за другим?
Есть ли разница в производительности?

Я знаю, что XMLReader является абстрактным типом для XMLTextReader, по крайней мере, это то, что я читал раньше, но я видел, как люди предлагали использовать методы XMLReader.Create(), а не новый экземпляр XMLReader().

Спасибо заранее...

С уважением.

Ответ 1

XmlReader.Create позволяет указать XmlReaderSettings, которые не выполняются ни в одной из перегрузок конструктора XmlTextReader.

Ответ 2

Ответ Microsoft просто:

Хотя Microsoft.NET Framework включает класс XmlTextWriter, являющийся реализацией класса XmlWriter, в версии 2.0 рекомендуется использовать метод Create для создания новых объектов XmlWriter. Метод Create позволяет указать функции для поддержки на созданном объекте XmlWriter, а также позволяет вам в полной мере использовать новые функции, представленные в версии 2.0.

НО этот ответ не учитывает самое важное различие:

Если вы вызываете "новый XmlTextReader", он будет установлен в режиме "v1compat", что в некоторых случаях приведет к очень плохому потоковому поведению, что потенциально приведет к OutOfMemoryExceptions! См. Почему мой новый XmlTextReader (поток) читает во многих мегабайтах в память, а не потоковывает правильно? Подробнее об этом.

РЕКОМЕНДАЦИЯ: Если вам действительно не нужно поведение .NET 1.1, вы никогда не должны называть "новый XmlTextReader", вместо этого всегда вызываете "XmlReader.Create".

Ответ 3

Для общего ответа на вопрос, почему этот тип кода вообще существует, вы можете взглянуть на Factory шаблон метода, Используя метод factory и абстрактный класс/интерфейс, вы можете писать более общий код, не привязывая себя к конкретной реализации. Это может помочь сделать ваш код более легко доступным для использования новых функций или для использования в разных ситуациях.