IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Parcours d'un fichier de plus en plus long


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut Parcours d'un fichier de plus en plus long
    Bonjour,

    Je dois parcourir et modifier un fichier xml assez gros (~10 Mo)

    Ce fichier ressemble de loin à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <root>
        <DOCUMENT> [...] </DOCUMENT>
        <DOCUMENT> [...] </DOCUMENT>
        <DOCUMENT> [...] </DOCUMENT>
        <DOCUMENT> [...] </DOCUMENT>
        [...]
    </root>
    Je charge donc mon fichier dans un Objet Document et récupère la liste des nodes <DOCUMENT/> dans une NodeList via la méthode suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NodeList list = document.getElementByTagName("DOCUMENT");
    et j'itère ensuite dessus de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int i = 0; i < list.getLength(); i++) {
         Node document = list.get(i);
         // Process...
    }
    Le problème, c'est qu'au fur et a mesure, le passage d'un node à un autre est de plus en plus lent.

    J'ai bien sur vérifié que ce n'était pas mon process qui était de plus en plus lent, mais bien le passage d'un node à un autre.

    Est-ce un comportement normal? Si oui, y-a-t'il moyen de le contourner?


    Merci pour votre aide éventuelle.

  2. #2
    Membre chevronné Avatar de Rei Angelus
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2006
    Messages
    292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2006
    Messages : 292
    Par défaut
    Je vois déjà une première chose à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Node document = null;
     
    for (int i = 0; i < list.getLength(); i++) {
         document = list.get(i);
         // Process...
    }
    Dans ton code, tu crées i d'instance de document.
    Dans le mien, je crée 1 instance.

    ==> Beaucoup moins de mémoire utilisée si i est grand.

  3. #3
    Membre actif
    Inscrit en
    Avril 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2006
    Messages : 35
    Par défaut
    Bonjour.
    @Fistons, as tu essayé de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    NodeList list = document.getElementByTagName("DOCUMENT");
    if (list != null) {
        Node document = list.getFirst();
        while (document != null) {
            // traitement du doc
            document = document.getNextSibling();
        }
    }
    histoire d'éviter les get(i) qui doivent être de plus en plus couteux quand i est grand.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il y a combien de tags "Document" dans ton DOM? Ton process, il fait quoi exactement, il modifie la structure ou fait les modifications sur un copie de la structure?

    Si vous avez des milliers de tags Document, j'abonde dans le sens de Croco19, rien ne nous dit que l'implémentation de List utilisée ne parcoure pas l'arbre complet pour atteindre le noeud voulu.

    @Rei Angelus: non, du tout, vous créez autant d'instance que lui. C'est l'api DOM qui les crée!

Discussions similaires

  1. Windows Azure : plus simple, plus flexible, plus ouvert
    Par Gordon Fowler dans le forum Microsoft Azure
    Réponses: 2
    Dernier message: 08/06/2012, 21h44
  2. Réponses: 3
    Dernier message: 02/05/2007, 23h02
  3. Réponses: 3
    Dernier message: 15/11/2006, 11h10
  4. [windows xp] Les fichiers ne s'affichent plus
    Par Analin dans le forum Administration
    Réponses: 4
    Dernier message: 29/06/2006, 10h01
  5. Redirection sur des fichiers qui n'existent plus
    Par gaia_dev dans le forum Apache
    Réponses: 3
    Dernier message: 03/02/2006, 19h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo