xdocument parse node from example descendants .net xml performance linq-to-xml xmldocument

.net - parse - Rendimiento: XDocument versus XmlDocument



xdocument.parse c# (3)

Escribí un violín de prueba. Y así va

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; }

El resultado de esta prueba fue que la PRUEBA 1 fue 10 veces más rápida. Entonces, aquí XElement superó a XmlDocument

He leído una comparación entre los dos here . Esta es principalmente una cuestión de rendimiento, relacionada con la memoria y la velocidad.

Tengo varios documentos XML que tienen más de 100 - 300 K de tamaño. Me he dado cuenta de que hay cierto retraso al cargar esta información en un XDocument lugar de un objeto XmlDocument .

  • ¿Hay una diferencia seria de rendimiento entre estos dos objetos?
  • ¿Acceden al contenido del XML de forma diferente?
  • Cuando se trabaja con una cadena de XML, ¿cuál es la preferida, o hay una diferencia?

El uso final de estos objetos es ejecutar consultas ( XPath o LINQ, según sea) en el objeto en cuestión.


XmlDocument es una implementación puramente gestionada del Modelo de objetos de documento. No hay interoperabilidad con ningún componente COM, como la biblioteca MSXML. Cualquier reclamo de lo contrario es completamente falso. El conjunto completo de APIs de XLinq surgió como una forma más amigable de interactuar con XML con la introducción de LINQ en .NET Framework.

Si está tratando de maximizar el rendimiento y se siente cómodo usando XPath, intente usar el XmlDocument y el uso de expresiones compiladas de XPath .


XmlReader es la API más baja en .NET que todas las demás API XML en .NET usan bajo las escenas. Naturalmente, eso significa que es el más difícil de tratar, así como el más rápido. Es una API de transmisión, por lo que también es mejor para la memoria.

Entre XmlDocument y XDocument también XDocument como Linq a XML, aquí hay algunos números en bruto: http://blogs.msdn.com/b/codejunkie/archive/2008/10/08/xmldocument-vs-xelement-performance.aspx

Ambos encuentran que la clase XDocument es más rápida / eficiente. La productividad / eficiencia del programador no debe ser ignorada también. Personalmente me resulta más fácil trabajar con XDocument .