我想了解读取XML的XMLReader.Create
和new XMLTextReader()
之间的区别。为什么我会选择一个呢?
有性能差异吗?
我知道XMLReader是XMLTextReader的抽象类型,至少这是我之前读过的,但我看到人们建议使用XMLReader.Create()方法而不是新的XMLReader()实例。
提前致谢...
此致。
答案 0 :(得分:13)
XmlReader.Create
允许您指定XmlReaderSettings
,XmlTextReader
构造函数重载都没有。
答案 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。使用工厂方法和抽象类/接口可以帮助您编写更多通用代码,而不是将自己与特定实现联系起来。这有助于使您的代码更容易利用新功能或在不同情况下使用。