2009-03-03 17 views
17

Il framework .Net ora ha (almeno) quattro diversi metodi di lettura di una stringa Xml. Ho usato ciascuno di XmlDocument, XmlReader, XPath e XElement, ma quale è il più efficiente da usare durante la codifica o durante l'esecuzione? Ognuno è progettato per un compito diverso, quali sono i pro e i contro?Il modo più efficiente per analizzare Xml


Aggiornamento: Utilizzando un XmlReader sembra essere il modo più rapido per leggere XML, che suona ragionevole per me, ma ha i propri limiti. Vorrei sapere se c'è qualche differenza di prestazioni tra XmlDocument e XLinq per accedere a xml in modo non sequenziale.


Aggiornamento: Ho trovato alcuni post a confronto i diversi metodi di caricamento di un documento XML. XmlReader è il più veloce, c'è una differenza insignificante tra XmlDocument e LINQ in XML fino a quando non carichi un documento con oltre 10.000 nodi in cui LINQ to XML viene visualizzato in primo piano.

risposta

12

I tre metodi più comuni per leggere sono:

XmlDocument Si legge l'intero file in una struttura ad albero che possono poi essere accessibile utilizzando XPath o sfogliando tutti i nodi. Richiede molta memoria per file molto grandi poiché l'intera struttura XML deve essere caricata in memoria. Molto buono e semplice da usare per i file più piccoli (meno di alcuni meg).

XmlReader veloce, ma anche un vero e proprio dolore da usare dal momento che è sequenziale. Se è necessario tornare indietro, non è possibile, e la struttura XML di solito è molto incline ad avere ordini disorganizzati. Inoltre, se si legge da un flusso non finale di XML, questo è probabilmente l'unico modo per andare.

serializzatori XML Questo fa praticamente tutto per voi, forniscono l'oggetto principale del vostro modello e crea e leggere il codice XML per voi. Tuttavia, non hai quasi alcun controllo sulla struttura e leggere le versioni precedenti del tuo oggetto è un problema. Quindi questo non funzionerà molto bene per la persistenza.

XDocument e LINQ to XML Come ha sottolineato Daniel Straight. Ma non lo so abbastanza per commentare. Invito chiunque a modificare il post e aggiungere le informazioni mancanti.


Ora la scrittura è un'altra storia. È doloroso mantenere un XmlDocument e XmlWriter è un gioco da ragazzi.

Direi, dalla mia esperienza, che la migliore combinazione è scrivere usando XmlWriter e leggere usando XmlDocument.

4

Quello più veloce sarebbe XmlTextReader. Da MSDN:

"rappresenta un lettore che fornisce velocemente, non in cache, forward-only l'accesso ai dati XML."

Maggiori informazioni qui: XmlTextReader Class

Anche se in realtà dipende il problema di decidere quale "metodo" sarebbe più appropriato per l'uso. Se hai bisogno di leggere un file XML una volta sola (ad esempio leggendo e memorizzando nella cache alcune impostazioni globali delle app, ecc.), Allora XmlTextReader è il vincitore. Ma ricorda, è forward-only-reader. Se hai bisogno di cercare/modificare tutto su XML, probabilmente dovresti usare XmlDocument Class.

+0

-1: 'XmlTextReader' non deve essere utilizzato direttamente. Usa 'XmlReader.Create' per creare un' XmlReader'. –

5

C'è anche XDocument e LINQ to XML, che considero di gran lunga il più efficiente quando si tratta di programmare il tempo.

+0

Qualche idea di XDocument rispetto a XmlDocument? – bstoney

+0

Non lo so. Di solito non gestisco insiemi di dati abbastanza grandi per le prestazioni da importare. –

Problemi correlati