2009-05-13 14 views
5

In una delle applicazioni che stiamo sviluppando eseguiamo molte elaborazioni XML. Attualmente usiamo DOM e XPath per la maggior parte dell'elaborazione e non siamo molto soddisfatti delle prestazioni.Da Linq a XML vs DOM

Al momento stiamo considerando di spostare la logica di elaborazione XML su LINQ e le nostre indagini iniziali suggeriscono che le prestazioni di LINQ sono molto meglio di DOM.

Prima di apportare queste modifiche mi piacerebbe sapere come si sentono gli altri a riguardo. Sta usando LINQ un'opzione migliore? Qualsiasi svantaggi ecc ...

Grazie, Shamika


La ringrazio molto per le vostre risposte. Ho eseguito alcuni test delle prestazioni e, come previsto, XmlReader ha eseguito sia XmlDocument che LINQ. Si noti che questo è solo per la lettura XML.

Inoltre, se è necessario utilizzare facilmente LINQ, è possibile implementare l'elaborazione LINQ XML utilizzando alcune funzionalità di XmlReader e ottenere prestazioni migliori rispetto a XmlDocument. Si prega di fare riferimento ai commenti "rwwilden" per ulteriori informazioni.

Grazie.

+0

Dai un'occhiata a questa domanda: http: // StackOverflow.it/questions/182976 –

risposta

1

Il mio punto di vista è che LINQ -> XML è più facile da usare rispetto a DOM. È più intuitivo per me e molto più facile da leggere IMO.

2

Non sono sicuro che si noterà un miglioramento delle prestazioni molto grande utilizzando LINQ2XML anziché DOM/XPath. Sia per DOM che per LINQ2XML il documento su cui si sta iterando è rappresentato da un albero in memoria.

Se le prestazioni sono davvero un problema e si dispone di documenti XML piuttosto grandi, è possibile dare un'occhiata al supporto dello streaming XML rudimentale implementato nel framework (tramite XStreamingElement). Controlla anche questo team Microsoft XML blog entry.

3

L'utilizzo del DOM (ad esempio System.Xml.XmlDocument) è più lento, a causa del ricco supporto di navigazione (tutti i riferimenti iniziano a sommarsi) e questo sovraccarico diventerà più significativo con l'aumentare del numero di nodi.

I modelli di oggetti più semplici (System.Xml.Linq.XDocument e System.Xml.XPath.XPathDocument) non hanno strutture così complesse, ma consentono la navigazione con altri mezzi. Ciò potrebbe aumentare il sovraccarico della CPU, ma dovrebbe risparmiare memoria.

Alla fine è necessario il profilo (tempo e spazio) nel proprio caso e considerare anche la differenza reale (percepita dall'utente) che fa.

Tuttavia, per prestazioni ottimali non caricare tutto il documento in memoria: utilizzare System.Xml.XmlReader e System.Xml.XmlWriter e fare tutto in un flusso. Ovviamente questo aggiunge costi di sviluppo.

. NET dispone di un ricco (forse troppo ricco) set di API XML, che è il migliore (o almeno il meno peggio) in quanto puoi essere determinato solo da te facendo i trade-off che sono i migliori per te.

Personalmente eviterei XmlDocument e utilizzare XPathDocument (soprattutto da leggere, e query con XPath) o XDocument (soprattutto per creare) dove XmlReader/XmlWriter non dà abbastanza di un incremento delle prestazioni da giustificare.