6
votes

Un XPathDocument charge-t-il le document XML complet?

Si je fais

XPathDocument doc = new XPathDocument("filename.xml");


1 commentaires

Intéressant, un runtime C # pour un téléphone portable.


5 Réponses :


5
votes

Oui, tout le document XML est représenté en mémoire .

Une solution consiste à scinder un grand document XML en plusieurs plus petits.

ou, sinon, vous pouvez écrire votre propre xmlreader ignorera les sous-arbres non désirés. Vous pouvez transmettre ce xmlreader comme argument sur le xpathDocument () constructeur - besoin de le camoufler comme textreader . .


2 commentaires

Existe-t-il un meilleur moyen de charger certaines parties d'un document XML? Comme juste certaines tags?


@wires: Pas une solution système, mais vous pouvez écrire votre propre xmlreader qui ignorera les sous-arbres non désirés. Vous pouvez transmettre ce xmlreader comme argument sur le constructeur XPathDocument () - besoin de le camoufler comme textreader. :)



1
votes

https://msdn.microsoft.com /en-us/library/system.xml.xpath.xpathdocument.aspx

"fournit une représentation rapide, en lecture seule, en mémoire d'un document XML à l'aide du modèle de données XPATH."


0 commentaires

-1
votes

3 commentaires

L'utilisation du constructeur de flux n'a aucun effet sur la quantité de mémoire que le XPathDocument utilisera. Et Linq to XML n'est pas plus rapide que sax (ou à l'aide d'un xmlreader, ce qui est utilisé dans .NET à la place de saxo), ni - contrairement à l'utilisation d'un xmlreader - évite-t-elle de lire tout le document en mémoire.


En ce qui concerne le constructeur de flux, c'est pourquoi j'ai écrit "tu pourrais vouloir". D'autre part, je pense que vous devriez jeter un oeil sur la manière dont LINQ diffuse les données et ne charge pas de fichier complet à la mémoire.


La classe XstreamingElement peut écrire un très grand document XML sans créer un document XML en pleine mémoire. Mais ce n'est pas utilisé pour la lecture. Lorsque la plupart des gens parlent de Linq à XML (comme dans les deux exemples que vous avez liés à), ils parlent de xdocument et xdocument charge en fait le document XML en pleine mémoire. Y a-t-il un impressionnant objet Linq que je néglige? Croyez-moi, c'est quelque chose que j'aimerais me tromper.



2
votes

Vous voulez probablement quelque chose de plus comme le SYSTEM.XML.XMLReader .


0 commentaires