2009-08-28 7 views
5

Ho un file XML abbastanza grande che ho bisogno di analizzare in una struttura di classe .NET (per essere mappato su un formato di record a lunghezza fissa e trasmesso via MQ). Le prestazioni sono importanti, ma non assolutamente critiche.Quanto è grande la differenza di velocità tra XPathNavigator e XmlReader, davvero?

Quasi sempre utilizzo XPathNavigator per leggere file XML perché è molto più semplice di XmlReader. D'altra parte, so che XmlReader è più veloce di XPathNavigator, perché teoricamente legge solo un nodo alla volta mentre XPathNavigator deve leggere abbastanza per eseguire un XPath, possibilmente l'intero documento.

La mia domanda è: quanto più veloce è davvero? Farà una differenza notevole leggendo alcune migliaia di nodi? Qual è il punto di svolta in cui devo praticamente passare a XmlReader? O è XPathNavigator ottimizzato al punto che è sempre una buona opzione?

La maggior parte della mia esperienza XML è su file relativamente piccoli, quindi sto cercando input da chiunque abbia lavorato con file di grandi dimensioni.

risposta

5

Per quanto ne so, gli unici punti in cui è possibile ottenere un'implementazione di XPathNavigator provengono sia da .Xml.Linq.XDocument sia da XPathDocument, entrambi i quali contengono l'intero albero in memoria.

L'XmlReader d'altra parte può recuperare e analizzare un flusso di XML senza la necessità di raccogliere un set di nodi in un albero.

Quindi supponendo che si raccolgono tutti i dati richiesti in un solo in avanti maniera, poi per grandi insiemi di dati XmlReader dovrebbe uscire svolgere XPathNavigator semplicemente sulla base del fatto che: -

  1. Avresti dovuto deserialise un flusso di XML comunque per popolare un documento e
  2. Non si dovrebbe caricare un grande insieme di elementi in memoria.
Problemi correlati