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

Collection et Stream Java Discussion :

methode trop gourmande


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Par défaut methode trop gourmande
    Bonjour à tous, j'utilise une méthode en java qui permet de m'extraire du code html qui pour un planning.

    Si mon planning n'a pas beaucoup de ligne tout va bien mais à partir d'une dizaine de ligne j'ai un message disant que mon agent utilise beaucoup de mémoire.

    Je pense que cela vient de la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (int i = 0; i < persons.size(); i++) {
    				PlanningPerson pP = (PlanningPerson) persons.elementAt(i);
    				sb.append(pP.lineHTML());
     
    			}
    persons est un vecteur qui contient des objets PlanningPerson
    Je parcours ce vecteur et charge à chaque fois ses objets, je pense que c'est cela qui prend beaucoup de mémoire.
    Il faudrait que je puisse libérer pP à chaque fois.

    Comment je pourrais faire svp ?

    Merci.

  2. #2
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, je te conseille de jeter un oeil à cette page de la FAQ : Pourquoi ne faut-il pas employer la classe Vector ?

    Ormis cela, il est difficile de voir d'où vient le problème sans connaitre l'exception ni avoir plus de code.

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    Bonjour ,

    Je vais te donner une proposition , mais franchement je ne suis pas sur que c'est ça la raison ,

    Au lieu de ça : for (int i = 0; i < persons.size(); i++) {

    Essaye de faire
    for(iterator it = persons.iterator ; it.hasNext() ; ) {


    PlanningPerson pP = (PlanningPerson) it.next();;
    sb.append(pP.lineHTML());

    }

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Par défaut
    Merci pour vos réponses.

    J'ai remplacé les Vector par des ArrayList, mais je n'ai pas trop gagné en perf, je reste à 13% (Agent memory usage (13) percentage of total)

    J'utilise également l'iterator.

    En fait je n'ai pas d'exception, c'est juste un avertissement du serveur ou est exécuté l'agent java.

    Je peux peut être vous envoyer les deux classes si vous le voulez.

    Merci.

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Avril 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : Tunisie

    Informations forums :
    Inscription : Avril 2008
    Messages : 33
    Par défaut
    Rebonjour ,

    Oui tu peux envoyer les classes si tu veux , pour qu'on puisse savoir la cause du ce problème.

  6. #6
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Commence par éviter les déclarations de références dans une boucle.

  7. #7
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Commence par éviter les déclarations de références dans une boucle.
    Et pourquoi donc ?

  8. #8
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Citation Envoyé par seroa Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i = 0; i < persons.size(); i++) {
    				PlanningPerson pP = (PlanningPerson) persons.elementAt(i);
    				sb.append(pP.lineHTML());
    							}
    Il faudrait que je puisse libérer pP à chaque fois.
    Comment je pourrais faire svp ?
    La variable pP est modifiée à chaque tour de boucle, tu n'as pas à libérer quoique ce soit, ce n'est qu'une référence vers un des objets contenus dans le vecteur persons. Ce qui peut être gros, c'est le code HTML renvoyée par lineHTML() et/ou le contenu du StringBuilder résultat de la concaténation des codes HTML

  9. #9
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    Citation Envoyé par herve91 Voir le message
    La variable pP est modifiée à chaque tour de boucle, tu n'as pas à libérer quoique ce soit, ce n'est qu'une référence vers un des objets contenus dans le vecteur persons. Ce qui peut être gros, c'est le code HTML renvoyée par lineHTML() et/ou le contenu du StringBuilder résultat de la concaténation des codes HTML
    Effectivement j'ai dit une connerie. Autant pour moi !

  10. #10
    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
    je gagerais, à vue de nez, que ton problème de perfs (qu'on a pas identifié d'ailleurs, tu parle de 13% , mais 13% de quoi??!), si il existe, viens de PlanningPerson.lineHTML(). La boucle en elle-même n'a aucun soucis (sauf si chaque ligne HTML fait 10M, mais j'en doute)

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 135
    Par défaut
    Bonjour à tous et merci pour vos réponses.

    J'ai toujours ce problème de mémoire. En fait c'est la console du serveur domino qui m'envoie ce message lorsque mon agent java est lancé.

    Je pense aussi que le problème vient de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sb.append(pP.lineHTML());
    , c'est assez long ce que renvoi pP.lineHTML().

    Mais pourquoi il affiche un message qu'à partir d'un certain nombre de ligne ?

    J'ai le message seulement après une modification, lorsque je relance le planning et que celui-ci n'a pas été modifié, il n'affiche pas le message, comme s'il l'avait gardé en cache.

    Merci.

  12. #12
    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
    on a pas le code de ton lineHTML, donc impossible de te dire pourquoi il prend de l'espace en mémoire!

Discussions similaires

  1. requete trop gourmande
    Par nicerico dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/03/2009, 14h23
  2. Inserts trop gourmand en mémoire
    Par ledjlale dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 05/11/2008, 21h51
  3. Script trop gourmand en ressources
    Par zevince dans le forum Langage
    Réponses: 4
    Dernier message: 01/06/2007, 04h30
  4. [Tableaux] count trop gourmande ?
    Par Anubis dans le forum Langage
    Réponses: 3
    Dernier message: 12/02/2007, 15h45
  5. Optimiser une table sur SQL server trop gourmande en CPU
    Par molarisapa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/06/2006, 16h17

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