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

AWT/Swing Java Discussion :

quelle table/grille pour beaucoup de données


Sujet :

AWT/Swing Java

  1. #1
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut quelle table/grille pour beaucoup de données
    Bonjour a tous,

    voila je dois gerer et afficher une grille de données contenant plusieurs milliers de point (jusqu'a 50 000 ) mais qui se retrouvent dans une matrice d'environ 12000 lignes sur 700 colonnes soit pres de 8 millions de points potentiels.

    J'ai essayé plusieurs librairies mais des que j'atteins le million de points cela se met a ramer dur, sachant qu'il faut que cette table gere les en tete de ligne et de colonne ...

    donc ma question : connaissez vous un composant/librairies (pas forcement open source) qui gere cette quantité de données ?

    merci pour vos suggestions

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Normalement la JTable ne demande que les composants visibles. Comme il n'y a pas, je présume, un million de cellules visibles simultanément, cela devrait aller.

    Le problème se trouve peut être au niveau du modèle ?...
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Points : 179
    Points
    179
    Par défaut
    Fait un système de chargement de ton model au fur et à mesure, et la tu n'auras plus de soucis. C'est la seule solution viable à mon avis.

  4. #4
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut
    le fait de charger le model au fur et a mesure permet d'etre fluide au depart mais au fur et a mesure du chargement on retrouve a nouveau le probleme.

    >>gifffftane
    je pensais que la table gerait effectivement uniquement ce qui etait dans le viewport mais visiblement ce n'est pas le cas:
    par exemple je met 2 minute a construire le model et une fois tout construit cela met 5 min a s'afficher !

  5. #5
    Membre habitué
    Inscrit en
    Décembre 2004
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Décembre 2004
    Messages : 201
    Points : 179
    Points
    179
    Par défaut
    Eh bien non puisque lorsque tu charges de nouvelles données, tu "décharges" les autres, et le garbage s'occupe de libérer la mémoire.

  6. #6
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Je pense qu'il y a quelque part quelque chose qui ne va pas dans ta JTable ou ton modèle.

    Pourrais-tu reproduire le phénomène à part de ton application ?

    Pourrais-tu savoir ce qui se passe pendant les deux minutes de chargement du modèle, et les 5 minutes d'affichage ?

    Peux-tu inhiber complètement le modèle (qu'il renvoie 3 valeurs), et voir ce qui se passe ?

    Etc.
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  7. #7
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Je pense qu'il y a quelque part quelque chose qui ne va pas dans ta JTable ou ton modèle.

    Pourrais-tu reproduire le phénomène à part de ton application ?
    difficilement car les objets que j'affiche proviennent de requetes en bdd et portent sur des molecules chimique.
    la seule chose que je puisse faire est simuler la construction avec des vecteur contenant des String et initialiser la montée en charge.
    Mais etant donné que normalement je manipule des objets assez complexes , je ne suis pas sur que le "poids" des string et de mes objects soit comparable, ce qui risque de faussé legerement la simulation ...

    Citation Envoyé par gifffftane Voir le message
    Pourrais-tu savoir ce qui se passe pendant les deux minutes de chargement du modèle, et les 5 minutes d'affichage ?
    pendant les 2 minutes du chargement oui je sais ce qu'il se passe :
    initialisation des vecteurs puis attribution des valeurs pour les "cases" ou il y a des resultats.
    Par contre pendant les 5 min avant l'affichage effectif non je ne sais pas ce qui se passe. il n'y a aucun appel de methode, on dirait que c'est juste le rendu graphique qui travaille je ne sais pas trop expliquer ce qui se passe pendant cette phase

    Citation Envoyé par gifffftane Voir le message
    Peux-tu inhiber complètement le modèle (qu'il renvoie 3 valeurs), et voir ce qui se passe ?
    oui , il n'y a aucun probleme, tout est fluide

  8. #8
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Il serait bien étonnant qu'il n'y ait aucun appel de méthode pendant 5 minutes !

    Quelques questions, encore, pour ce qui est du rendu graphique :

    • Utilises-tu des choses spéciales, ou te contentes-tu de la JTable, et notamment de ses cellules standards ?
    • As-tu mis ta JTable dans un JScrollPane standard ?
    • Dans l'affirmative, as-tu mis cette JScrollPane dans un JPanel standard ?
    • As-tu placé à l'un de ces niveaux une preferredSize, ou similaire ?

    Pour le modèle :

    • Pourquoi passes-tu deux minutes à initialiser ton modèle ??
    • Dans ce modèle, peux-tu mettre une trace pour t'assurer que la JTable ne te demande que la valeur des cellules visibles ?
    • Tu sembles faire une préparation de valeurs... lorque le modèle t'en demande une, comment retrouves-tu la valeur préparée ?
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  9. #9
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut
    Citation Envoyé par gifffftane Voir le message
    Il serait bien étonnant qu'il n'y ait aucun appel de méthode pendant 5 minutes !
    je suis d'accord mais meme dans le debugger je ne vois pas ce qui se passe

    Quelques questions, encore, pour ce qui est du rendu graphique :
    Utilises-tu des choses spéciales, ou te contentes-tu de la JTable, et notamment de ses cellules standards ?
    j'utilise tout un tas de chose speciale
    au debut j'utilisais une librairie (elegantJBeans) qui m'avais permis de ganger en fluidité et qui en plus proposait
    plus de souplesse qu'une jtable dans la gestion des entetes de lignes et colonnes.
    Mais cela saturait à nouveau avec des grandes matrices.
    je suis revenu à un simple systeme jtable, tablemodel.
    j'utilise neanmoins des astuces permettant de faire des entetes de lignes et colonnes groupées sur lequel viennent se fixer des renderer (les renderer ralentissent pas mal le rendu final)
    J'ai egalement des renderer pour les cellules (qui renvoie en gros un panel coloré en fonction de la valeur)

    As-tu mis ta JTable dans un JScrollPane standard ?
    Dans l'affirmative, as-tu mis cette JScrollPane dans un JPanel standard ?
    non le jscrollpane utilisé etend jscrollpane mais ne comporte que des methodes de traitement
    il est actuellement dans un JXTitledPanel (swinglabs) mais je n'ai pas noté de difference avec un JPanel standard.

    As-tu placé à l'un de ces niveaux une preferredSize, ou similaire ?
    il y a des preferred size sur le rowheader
    j'ai egalement une fonction qui permet de redimensionner la taille des cellules en hauteur et largeur (j'agit au niveau des celulles et de la table
    (le rendu global pouvant etre defini comme une sorte de heat map pour laquelle
    on peut voir plus ou moins de donnée en meme temps, ce qui explique que je doive afficher un tres grand nombre potentiel de cellule en meme temps lorsque l'utilisateur veut une vue globale)

    Pour le modèle :
    Pourquoi passes-tu deux minutes à initialiser ton modèle ??
    j'avais une premiere phase d'initialisation à vide des vecteurs du model correpondant aux lignes(soient potentiellement 18 000 lignes, pour 800 colonnes),
    puis une deuxieme phase ou je vais piocher dans une hashtable les valeurs que l'on a effectivement en base et qui sont misent a jour dans les vecteurs avec un setValueAt()
    (puisque ma matrice final est un espece de gros gruyere ou toutes les cellules n'ont pas de valeurs)
    Hier je suis revenu sur un model maison, qui laisse tomber les vecteurs du defaulttablemodel (les vecteurs etant ce qu'il y a de plus lent a mon sens en java)
    et le model s'appuie maintenant uniquement sur la hashtable.

    Dans ce modèle, peux-tu mettre une trace pour t'assurer que la JTable ne te demande que la valeur des cellules visibles ?
    Tu sembles faire une préparation de valeurs... lorque le modèle t'en demande une, comment retrouves-tu la valeur préparée ?
    je dois pouvoir tracer oui, je testerai
    Comme decrit plus haut je pioche dans une hashtable qui me renvoie l'objet an fonction des coordonnées dans la matrice.

  10. #10
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Tout ça me parait aller dans le bon sens...

    Concernant les renderers, tu dis qu'ils ralentissent le rendu final... pourquoi ? Ce sont des renderers perso ? Et est-ce grave ?

    Concernant le preferredSize ou assimilé, il FAUT que le le JPanel qui contient le scroll pane, ou au moins le scroll lui même ait un preferredSize, ou un size ou quelque chose qui donne sa dimension, cela dépend du layout... quel layout utilises-tu ?

    Très bien d'avoir laissé tombé le Vector et simplifié ton modèle...

    Concernant la hashtable, comment et à quel moment calcules-tu les hash ? Et, surtout, avec quoi fabriques-tu tes clefs... puisque j'ai peur que, pour fabriquer tes clefs, et calculer leur hash, tu sois de fait obligé de parcourir toute ta base... ce que l'on voudrait éviter au départ !
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

  11. #11
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Je ne sais pas trop ce qu'il en est sur la JTable/le JTree mais le renderer des listes (JList/JComboBox) est appelle sur chacune des lignes (meme celles non-visibles) pour pouvoir calculer correctement l'espace total scrollable pour la configuration du JScrollPane.
    Si jamais c'est aussi le cas ici, il faudra eventuellement que tu te geres toi-meme les JScrollBar et les actions a effectuer en cas de scroll pour eviter ce genre d'inconvenient.

    Essaie de fixer toi-meme la hauteur des lignes et la largeur de chaque colonne pour eviter ce genre d'appels. Essaie aussi de regarder les sources de la JTable, ColumnModel*, etc... pour voir si lors de son initialisation, il n'y a pas quelque chose qui lui fait parcourir l'integralite des lignes et/ou de ses valeurs.

    *Autre supposition : la gestion du tri des colonnes dans Java6+...
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  12. #12
    Membre averti Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Points : 375
    Points
    375
    Par défaut
    alors le renderer pour le header table est effectivement appelé pour l'ensemble de la table, meme si seulement la moitié des colonnes sont visibles ...
    j'ai pas encore mis de traceur dans le renderer des cellules mais je suppose que c'est pareil .

  13. #13
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Ah !
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

Discussions similaires

  1. Quelle structure utiliser pour manier ces données
    Par marcelin88 dans le forum Débuter
    Réponses: 8
    Dernier message: 26/03/2014, 15h12
  2. Réponses: 6
    Dernier message: 08/12/2013, 09h25
  3. Lecture de tables windev pour reprise de données
    Par nico84 dans le forum HyperFileSQL
    Réponses: 6
    Dernier message: 20/03/2012, 21h18
  4. [MPD] organisations tables pour accueillir beaucoups de données
    Par rokin-k dans le forum Schéma
    Réponses: 1
    Dernier message: 14/02/2010, 19h52
  5. Dupliquer une table qui contient Beaucoup de données
    Par kalder dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 31/10/2008, 16h56

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