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

2D Java Discussion :

ArrayList de 500 objets : ça rame


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Par défaut ArrayList de 500 objets : ça rame
    Bonjour,

    j'espère que je suis dans la bonne partie du Forum.

    Le titre est assez parlant, je récupère 500 lignes (15 colonnes) d'une base de données (pour le moment, au final il y en aura au moins 2 fois plus), construit un objet contenant chaque colonne de la ligne récupérée et enregistre ces 500 objets dans une ArrayList.

    L'objet contient une image passée en argument, chargée UNE SEULE FOIS (au démrage du programme).
    C'est une imageCompatible...

    Lorsque je souhaite récupérer des données précise, je parcours l'ArrayList avec un iterator comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (Iterator<Text> it = alText.iterator(); it.hasNext(); ) 
    {	
      Text iText = it.next();
      ...
    Lorsque je n'avais que 200 objets, ça ne rammait pas du tout, maintenant que j'en ai plus de 2 fois plus, ça ramme...
    Le MouseDragged met 3 secondes à s'effectuer...

    Le modérateur Bouye m'a montré comment "tricher" lors d'un drag en créant une seule image avec TOUTES celles qui existent... mais ça lagg quand même...

    Je pense du coup qu'il faut encore trouver autre chose pour optimiser le programme...

    Je pense que le souci vient de la lecture de la liste...

    Je n'ai pas créé de threads manuellement... peut être est ce une raison ??

    Y a t il une manière de gérer la lecture de super grande listes ?
    Je n'ai pas encore essayé le lire seulement une partie de la liste totale, en fonction de ce qui est visible à l'écran... Je viens tt juste d'y penser...

    J'espère que vous saurez me donner une piste...
    Merci !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Désolé mais je n'ai pas tout compris.
    Tu parles de liste, d'image, de MouseDragged ...
    Que souhaites-tu faire avec ta liste d'objets ?
    Que viennent faire l'image et le MouseDragged ?
    Si tu expliques un peu mieux, on pourra peut-être mieux t'aider.

  3. #3
    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
    tu peux nous montrer le code de lecture de ta base de données?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Par défaut
    je réexplique

    Je fais une sorte de carte interactive, et j'ai besoin d'une image de fond sur laquelle je mets pleins d'autres images.
    Ces images font partie d'un objet "Item".

    Je récupère 500 lignes (sur 15 colonnes) d'une base de données (pour le moment, parcequ'au final il y en aura au moins 2 fois plus).
    Avec, je construit autant d'objets "Item" et les mets dans une ArrayList puisque j'ai besoin d'accéder à leurs informations à différents endroits du programme.

    Chaque objet "Item" contient une image passée en argument, chargée UNE SEULE FOIS (au démarage du programme).
    C'est une imageCompatible...

    Lorsque je souhaite récupérer des données précise, je parcours l'ArrayList avec un iterator comme cela :
    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (Iterator<Text> it = alText.iterator(); it.hasNext(); ) 
    {	
      Text iText = it.next();
      //par exemple iText.getX(); ...
    Lorsque je n'avais que 200 objets, je pouvais faire un MouseDrag de TOUTES les images de manière très fluide, maintenant que j'en ai plus de 2 fois plus, ça ramme...
    Le MouseDragged met 3 secondes à s'effectuer...

    Le modérateur Bouye m'a montré comment "tricher" lors d'un drag en créant une seule image avec TOUTES celles qui existent... mais ça lagg quand même...

    Je pense du coup qu'il faut encore trouver autre chose pour optimiser le programme...

    Y a t il une autre manière de gérer la lecture de super grande listes parceque c'est peut être de la que vient le souci... ?

    Sinon, voila le comment je charge les objets "Item"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Dans la classe principale
    GestionBDD SqlObj = new GestionBDD();			
    String[][] stringValues = new String[nbRows][nbColumns];			
    stringValues = SqlObj.getItemValues();
    puis je crée un nouvel objet Item que j'ajoute à mon ArrayList
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alItem.add(new Item(image, ...valeurs de la BDD...));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    //getItemValues() de la classe GestionBDD
    try {	
    ResultSet result = stat.executeQuery("SELECT * FROM \"item\";");
    int i=0;
    while(result.next())
    {				
      tbl[i][0] 	= result.getString("id");
      tbl[i][1] 	= result.getString("equipment_type");
      tbl[i][2] 	= result.getString("pole_type");
    ...
    }
    result.close();
    stat.close();
    }
    catch (SQLException e) { e.printStackTrace(); }
    return tbl;
    je c pas si C ça qui cloche...

    je vois pas du tout quoi tenter pour accélérer le programme...

    Merci, gspr que C plus clair...

  5. #5
    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
    d'après ta description, ta liste a rien a voir avec le problème, ce serait plutot le paint() de ton composant qui est trop lent. As-tu déjà mesuré à quelle vitesse tu est capable de redessiner ton affichage?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2009
    Messages : 31
    Par défaut
    ola je c pas du tout cmt on calcul ce temps... ??

    quand je passe le curseur sur une image, elle est replacée par une autre, pour montrer à l'utilisateur que quelquechose se passe...
    et avec les 500 enregistrement c'est vachement lent.
    C'est ptet le paint, mais ya une condition qui consiste à vérifier la position X et Y du curseur est sur l'image (coin en haut à gauche et coin en haut à gauche + hauteur et + largeur). Mais pour ça, j'ai besoin de vérifier dans TOUTE la liste si ya des coordonnées qui vérifient cette condition...

    c pour ça que jpense que c'est le parcours de la liste le souci...
    G entendu parler de Intersect, mais j'arrive pas à la faire fonctionner..

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Problèmes avec ArrayList] Supprimer des objets égaux à null
    Par smutmutant2003 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 08/10/2009, 10h43
  2. [ArrayList] removeAll d'objets egaux
    Par Lady dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 24/09/2007, 10h32
  3. Serialisation/deserialisation d'un arrayList retourne des objets vides
    Par cdtkoenig dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 18/07/2007, 15h45
  4. Réponses: 1
    Dernier message: 18/01/2006, 18h39
  5. [ArrayList]transformer l'objet récupéré en double...
    Par snoop dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 16/07/2004, 16h16

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