.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
.