我正在优化自定义对象 - > XML序列化实用程序,它已完成并正常工作,这不是问题.
它通过将文件加载到XmlDocument
对象中,然后递归遍历所有子节点来工作.
我认为也许使用XmlReader
而不是XmlDocument
加载/解析整个事情会更快,所以我也实现了那个版本.
算法完全相同,我使用包装类来抽象处理一个XmlNode
与一个的功能XmlReader
.例如,GetChildren
方法yield返回子项XmlNode
或SubTree XmlReader
.
所以我写了一个测试驱动程序来测试这两个版本,并使用一个非平凡的数据集(一个900kb的XML文件,大约有1,350个元素).
但是,使用JetBrains dotTRACE,我发现XmlReader
版本实际上比XmlDocument
版本慢!XmlReader
当我在迭代子节点时,似乎在读取调用中涉及一些重要的处理.
所以我要说这一切:
有什么优势/劣势XmlDocument
和XmlReader
,和你应该使用什么情况下要么?
我的猜测是,文件大小阈值XmlReader
在性能上变得更经济,而且内存密集度更低.但是,该阈值似乎超过1MB.
我ReadSubTree
每次都在调用处理子节点:
public override IEnumerable<IXmlSourceProvider> GetChildren ()
{
XmlReader xr = myXmlSource.ReadSubtree ();
// skip past the current element
xr.Read ();
while (xr.Read ())
{
if (xr.NodeType != XmlNodeType.Element) continue;
yield return new XmlReaderXmlSourceProvider (xr);
}
}
Run Code Online (Sandbox Code Playgroud)
该测试适用于单个级别的许多对象(即宽和浅) …