XMLReader.Create()和新XMLTextReader()之间的区别

时间:2009-10-11 22:07:19

标签: c# xml

我想了解读取XML的XMLReader.Createnew XMLTextReader()之间的区别。为什么我会选择一个呢? 有性能差异吗?

我知道XMLReader是XMLTextReader的抽象类型,至少这是我之前读过的,但我看到人们建议使用XMLReader.Create()方法而不是新的XMLReader()实例。

提前致谢...

此致。

3 个答案:

答案 0 :(得分:13)

XmlReader.Create允许您指定XmlReaderSettingsXmlTextReader构造函数重载都没有。

答案 1 :(得分:6)

微软的答案很简单:

虽然Microsoft .NET Framework在2.0版本中包含XmlTextWriter类(XmlWriter类的实现),但建议您使用Create方法创建新的XmlWriter对象。 Create方法允许您指定要在创建的XmlWriter对象上支持的功能,它还允许您充分利用2.0版本中引入的新功能。

但这个答案遗漏了最重要的区别:

如果你调用'new XmlTextReader',它将被设置为'v1compat'模式,这将导致它在某些情况下具有非常糟糕的流行为,可能导致OutOfMemoryExceptions!有关详情,请参阅Why is my new XmlTextReader(stream) reading in many megabytes into memory rather than streaming properly?

建议:除非你真的需要.NET 1.1行为,否则你不应该调用'new XmlTextReader',而应该总是调用'XmlReader.Create'。

答案 2 :(得分:1)

有关为什么会出现此类代码的一般答案,您可能需要查看Factory Method Pattern。使用工厂方法和抽象类/接口可以帮助您编写更多通用代码,而不是将自己与特定实现联系起来。这有助于使您的代码更容易利用新功能或在不同情况下使用。