2010-10-27 8 views
1

J'ai un problème avec l'analyseur libxml sur l'iPhone! Im en utilisant le PerformXMLXPathQuery pour analyser un fichier XML avec environ 100 000 lignes. L'application se brise lors de l'exécution de PerformXMLPathQuery car elle manque de mémoire. Que puis-je faire ici?libxml alloue trop de mémoire sur l'iphone

Merci,

Markus

Répondre

3

Vous voudrez peut-être regarder xmlTextReader "streaming" interface de libxml2.

Il s'agit d'un curseur qui avance les données d'entrée qu'il a déjà traitées et qui ne génère pas de gros DOM intensif en mémoire lorsqu'il avance. Les requêtes XPath peuvent toujours être utilisées, avec la limitation selon laquelle les sous-arbres doivent être développés (c'est-à-dire, copiés dans des structures libxml en mémoire) pour les parties du document à rechercher. L'interface xmlTextReader est beaucoup plus fastidieuse que de simplement lancer quelques requêtes XPath sur l'élément racine, mais pour un document de cette taille, sur un périphérique dont la mémoire est limitée, il peut être votre meilleur choix.

Je viens de terminer une conversion en xmlTextReader pour des raisons similaires, et la mémoire utilisée lors du traitement XML est identique pour un document de 20 Ko et 30 Mo.

1

Vous pouvez essayer d'utiliser la NSXMLParser pour obtenir des données que vous souhaitez enregistrer l'utilisation de la mémoire

+0

Nous avons d'abord eu NSXMLParser mais cet analyseur est un moyen de ralentir pour une telle quantité de données ... – Markus

+0

êtes-vous sûr que le problème est un problème de mémoire? –

+0

Je le pense, Si je le lance dans Instruments, l'allocation de Live Bytes monte rapidement à 28,61 Mo puis se casse soudainement! Lorsque vous consultez le journal des périphériques, le type de rapport est: Mémoire faible – Markus

Questions connexes