Ответ 1
XmlReader.Create
позволяет указать XmlReaderSettings
, которые не выполняются ни в одной из перегрузок конструктора XmlTextReader
.
Я хотел бы узнать разницу между XMLReader.Create
и new XMLTextReader()
для чтения XML. Почему я должен выбирать один за другим?
Есть ли разница в производительности?
Я знаю, что XMLReader является абстрактным типом для XMLTextReader, по крайней мере, это то, что я читал раньше, но я видел, как люди предлагали использовать методы XMLReader.Create(), а не новый экземпляр XMLReader().
Спасибо заранее...
С уважением.
XmlReader.Create
позволяет указать XmlReaderSettings
, которые не выполняются ни в одной из перегрузок конструктора XmlTextReader
.
Ответ Microsoft просто:
Хотя Microsoft.NET Framework включает класс XmlTextWriter, являющийся реализацией класса XmlWriter, в версии 2.0 рекомендуется использовать метод Create для создания новых объектов XmlWriter. Метод Create позволяет указать функции для поддержки на созданном объекте XmlWriter, а также позволяет вам в полной мере использовать новые функции, представленные в версии 2.0.
НО этот ответ не учитывает самое важное различие:
Если вы вызываете "новый XmlTextReader", он будет установлен в режиме "v1compat", что в некоторых случаях приведет к очень плохому потоковому поведению, что потенциально приведет к OutOfMemoryExceptions! См. Почему мой новый XmlTextReader (поток) читает во многих мегабайтах в память, а не потоковывает правильно? Подробнее об этом.
РЕКОМЕНДАЦИЯ: Если вам действительно не нужно поведение .NET 1.1, вы никогда не должны называть "новый XmlTextReader", вместо этого всегда вызываете "XmlReader.Create".
Для общего ответа на вопрос, почему этот тип кода вообще существует, вы можете взглянуть на Factory шаблон метода, Используя метод factory и абстрактный класс/интерфейс, вы можете писать более общий код, не привязывая себя к конкретной реализации. Это может помочь сделать ваш код более легко доступным для использования новых функций или для использования в разных ситуациях.