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

Composants Java Discussion :

JList de taille infinie


Sujet :

Composants Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut JList de taille infinie
    Bonjour,

    J'ai un fichier d'environ 140Mo, dont chaque ligne est un objet
    traduit en String (pour laquelle j'utilise un StringTokenizer pour retrouver l'objet),
    Je dois afficher ces objets dans une liste mais il y a beaucoup trop de données et cela génère un OutOfMemory.

    Je voudrais savoir s'il y a moyen de lire dans le fichier ligne par ligne en synchronisation avec l'affichage dans la liste tout en traduisant les Strings en objets ?

    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,

    140Mo, ça doit en faire des milliers d'éléments dans la JList! Ca me parait difficilement exploitable par l'utilisateur non? n'y aurait-il pas un problème de conception?

    Sinon tu peux augmenter la mémoire utilisable par la JVM en passant en argument au démarrage de l'application : -Xmx512m (où 512 est la taille de la mémoire, par défaut c'est 128 il me semble)

    Est-ce que ton code est bien optimisé? l'utilisation de la méthode String.split est préférée à la classe StringTokenizer.

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Oui oui c'est normal. En fait je bosse sur la segmentation de texte, et en ce moment je dois faire en sorte de pouvoir segmenter un texte de 100Mo (équivalent 14 500 pages sur Word). Mon fichier de 148Mo fait environ 470 000 lignes.
    Il s'agit donc de découper tous les mots avec l'offset de début et de fin de la position de chaque mot.

    J'ai donc une classe dont chaque instance est un string (pour le mot)
    et une Liste de paire d'offsets. Donc plus ce mot apparait plus sa liste d'offset est longue.

    voici le début de cette classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class SEGINCONTEXTS  
      { 
     
    	/**
          * The String representation of the segment
          */
         private String segString;
         /**
          * The list of relative OffsetPairs for each occurence of the segment
          */
         private OffsetPairList occList;
    Et donc je transforme chaque objet en String du type :
    abattoirs_:_285345-8::345604-8::352009-8::352266-8::358483-8::360439-8::360699-8::369391-8::369408-8::375376-8::376005-8

    Voilà si vous avez une idée merci

  4. #4
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut
    Citation Envoyé par fanzyride Voir le message
    Oui oui c'est normal. En fait je bosse sur la segmentation de texte, et en ce moment je dois faire en sorte de pouvoir segmenter un texte de 100Mo (équivalent 14 500 pages sur Word). Mon fichier de 148Mo fait environ 470 000 lignes.
    Il s'agit donc de découper tous les mots avec l'offset de début et de fin de la position de chaque mot.

    J'ai donc une classe dont chaque instance est un string (pour le mot)
    et une Liste de paire d'offsets. Donc plus ce mot apparait plus sa liste d'offset est longue.

    voici le début de cette classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class SEGINCONTEXTS  
      { 
     
    	/**
          * The String representation of the segment
          */
         private String segString;
         /**
          * The list of relative OffsetPairs for each occurence of the segment
          */
         private OffsetPairList occList;
    Et donc je transforme chaque objet en String du type :
    abattoirs_:_285345-8::345604-8::352009-8::352266-8::358483-8::360439-8::360699-8::369391-8::369408-8::375376-8::376005-8

    Voilà si vous avez une idée merci
    Tu as essayé la remarque de morph41 avec l'option -Xmx512m ?

    Mais vu la taille des données, il est possible qu'il y ait quand même un problème de conception. Il est peut être nécessaire de mettre en place des systèmes de cache sur la liste (ne garder en mémoire quand les parties autour de ce qui est actuellement visitées)

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Désolé je me suis mal expliqué, en effet il est impossible de tout mettre directement dans la liste et je sais qu'il est possible de le faire en fonction du scrollpane que l'utilisateur déplace, mais je ne sais pas comment faire.

    Ma vm est déjà configuré de la sorte

    Merci

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 40
    Par défaut
    Alors ?

    Personne ne sais comment on fait pour garder en memoire que ce qu'on est en train de regardé dans la JList ?

  7. #7
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Le mieux serait de découper ta JList, genre tu classe par ordre alphabétique et tu n'affiche que lettre par lettre ou autre...
    Je pense pas que tu puisse manier une JList aussi énorme (ou alors je serai très interessé de savoir comment faire)

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    As-tu essayé de mettre un jcrollpane avec ta jlist.
    mais tu dois implémenter un JModel.

    Dans ce jmodel la première chose a connaitre est le nombre de lignes que tu voudras afficher au final par exemple 100000.

    Ensuite tu attends que l'on t'appelle sur les lignes que l'on veut afficher. tu seras appelé sur getElementAt ().

    Ensuite pour être sur de ne pas faire exploser ta mémoire tu peux ne garder que les 1000 dernier elements dans ton model.

    Maintenant pour pouvoir faire cela les prerequis sont :
    1) pouvoir facilement connaitre le nombre de lignes qu'il y a dans ton fichier
    2) pouvoir retrouver tres vite les lignes demandées car sinon ton appli sera très lente.

    bon courage

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

Discussions similaires

  1. Tableau de taille infinie
    Par tcheffa dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 04/08/2011, 12h53
  2. jList qui prend la taille qu'elle veut
    Par krolineeee dans le forum Composants
    Réponses: 16
    Dernier message: 24/06/2007, 01h18
  3. Diminuer la taille d'un code et probleme boucle infini
    Par Alucard9800XT dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/06/2007, 11h42
  4. JList avec cellules de tailles variables
    Par tyrsensei dans le forum Composants
    Réponses: 18
    Dernier message: 21/05/2007, 14h30
  5. Taille d'une JList
    Par Sloneczko dans le forum Composants
    Réponses: 3
    Dernier message: 08/12/2005, 22h35

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