Domanda

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 qual è 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?


Aggiornamento: L'uso di un XmlReader sembra essere il modo più veloce per leggere l'xml, il che mi sembra ragionevole, ma ha dei limiti. Vorrei sapere se c'è qualche differenza di prestazioni tra XmlDocument e XLinq per l'accesso a xml in modo non sequenziale.


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

È stato utile?

Soluzione

I tre metodi più comuni da leggere sono:

XmlDocument Legge l'intero file in una struttura ad albero a cui è possibile accedere utilizzando XPath o sfogliando tutti i nodi. Richiede molta memoria per file di grandi dimensioni poiché l'intera struttura XML deve essere caricata in memoria. Molto buono e semplice da usare per file più piccoli (meno di qualche mega).

XmlReader Veloce, ma anche un vero dolore da usare poiché è sequenziale. Se mai dovessi tornare indietro, non puoi, e la struttura XML di solito è molto incline ad avere ordini disorganizzati. Inoltre, se leggi da un flusso infinito di XML, questa è probabilmente l'unica strada da percorrere.

serializzatori XML Fondamentalmente questo fa tutto per te, fornisci l'oggetto root del tuo modello e crea e leggi l'XML per te. Tuttavia, non hai quasi alcun controllo sulla struttura e leggere le versioni precedenti del tuo oggetto è una seccatura. 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. Mantenere un documento Xml è difficile e usare XmlWriter è un gioco da ragazzi.

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

Altri suggerimenti

Esistono anche XDocument e LINQ to XML, che ritengo di gran lunga i più efficienti quando si tratta di programmare.

Il più veloce sarebbe XmlTextReader . Da MSDN:

  

" Rappresenta un lettore che fornisce veloce, non memorizzato nella cache, solo in avanti   accesso ai dati XML. "

Altro qui: XmlTextReader Class

Anche se dipende davvero dal problema decidere quale metodo " " sarebbe più appropriato per l'uso. Se devi leggere un file XML una sola volta (ad es. Lettura e memorizzazione nella cache di alcune impostazioni globali dell'app, ecc.), XmlTextReader è il vincitore. Ma ricorda, è solo lettore in avanti. Se devi cercare / modificare tutto l'XML, probabilmente dovresti usare Classe XmlDocument .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top