性能:XDocument与XmlDocument

时间:2010-12-08 03:33:46

标签: .net xml performance linq-to-xml xmldocument

我已经阅读了两个here之间的比较。这主要是一个与记忆和速度有关的表现问题。

我有几个XML文档,大小超过100 - 300 K.我注意到将此信息加载到XDocument而不是XmlDocument对象时存在一些延迟。

  • 这两个对象之间是否存在严重的性能差异?
  • 他们是否以不同方式访问XML的内容?
  • 使用XML字符串时,这是首选,还是有区别?

这些对象的最终用途是对相关对象运行查询(XPath或LINQ,取决于)。

4 个答案:

答案 0 :(得分:20)

XmlDocument是文档对象模型的纯粹托管实现。没有任何COM组件的互操作,例如MSXML库。否则,任何索赔都是完全虚假的。通过在.NET Framework中引入LINQ,整个XLinq API集成为一种更友好的XML交互方式。

如果您正在尝试最大限度地提高性能并且习惯使用XPath,请尝试使用XmlDocument并使用compiled XPath expressions

答案 1 :(得分:5)

XmlReader是.NET中最低的API,.NET中的所有其他XML API都在幕后使用。当然,这意味着它是最难处理的,也是最快的。它是一个流API,因此它最适合内存。

XmlDocumentXDocument之间,也就是Linq to XML,这里有一些原始数字:http://blogs.msdn.com/b/codejunkie/archive/2008/10/08/xmldocument-vs-xelement-performance.aspx

两者都发现XDocument类更快/更有效。程序员的生产力/效率也不应该被忽略。我个人觉得使用XDocument更容易。

答案 2 :(得分:0)

我写了一个测试小提琴。就像这样

var str = "some xml here";
string x = null;

// TEST 1
var el = XElement.Parse(str);

for (int i = 1; i < 1000000; i++)
{
    x = el.Element("EL1NAme").Element("InnerELNAme").Value;
}

Console.WriteLine(x);

// TEST 2
var readerSettings = new XmlReaderSettings() { DtdProcessing = DtdProcessing.Prohibit, XmlResolver = null };

XmlDocument doc = new XmlDocument();
using (var xmlReader = XmlTextReader.Create(new System.IO.StringReader(str), readerSettings))
{
    doc.Load(xmlReader);
}

for (int i = 1; i < 1000000; i++)
{
    x = doc.SelectSingleNode("//InnerELNAme").InnerText;
}

此测试的结果是,测试1 的速度提高了10倍。因此,这里XElement的表现胜过XmlDocument

答案 3 :(得分:0)

如果其他人还在寻找答案... 我已经设法自己做了一些基准测试。 XDocument 似乎大大超过了 XmlDocument。当然,您可能很想在此涉及 XmlReader,但这是另一个话题。

这是我的小基准测试结果:https://github.com/zulimazuli/dotnetXmlBenchmarks