java  

RE: Manipulation de gros tableaux: 2

Erik Mazoyer
Fri, 29 Nov 2002 05:31:12 -0800

J'ai déjà mis en place des architecture équivalente.
La meilleur solution est le multicouche :

1) JTable
2) Un TableModel qui est capable de déterminer l'identifiant d'un élément en
x,y
3) Un manager d'élément capable de renvoyer un élément à partir de son
identifiant

Pour le manager j'utilise SoftReference (pas WeakReference, qui a une durée
de vie vraiment trop courte) couplé à une Hastable.

Algo
Existe t'il une entrée dans la Hastable correspondant à l'identifiant
Oui
        Récupérer la SoftReference
        L'élément référencé est-il toujours en mémoire
        Oui
                Le retourner
        Non
                Le recréer à partir de la SGBD
                Placer l'élément dans la Hastable
                retourner l'élément
Non
        Créer l'élément à partir de la SGBD
        Placer l'élément dans la Hastable
        retourner l'élément

Tu aura donc une empreinte mémoire de 128000 identifiants au minimum. En
utilisant 8 octets par identifiant tu obtiens 1000 ko par tableau.

Après, le temps de réponse de ta JTable dépend de ta mémoire et du nombre de
tableaux affichés simultanément (plus de SoftReference conservé).

Attention, Swing est assez pervers pour interroger les TableModel même quand
le JTable n'est pas affiché.
Il peut être judicieux de mettre un model vide quand le JTable n'est plus
visible (principalement avec les JTabbedPane.

Cordialement,   

--------------------------------------------------------------------
Erik Mazoyer, Chef de projet
HyperOffice
6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
Tél. 01 41 96 96 76
Fax 01 41 96 96 77
Mél  [EMAIL PROTECTED] 
 

-----Message d'origine-----
De : Aurelien Mazurie [mailto:[EMAIL PROTECTED]]
Envoyé : jeudi 28 novembre 2002 22:52
À : [EMAIL PROTECTED]
Objet : Manipulation de gros tableaux: 2



        J'oubliai =)
        J'ai regardé pas mal de documentation là dessus, et je suis tombé
sur 
une histoire de SoftReference, qui apparemment pourrais me servir: si 
j'ai bien compris l'idée c'est de charger mes données dans un gros 
Object[][], et d'en garder une référence via une SoftReference, qui me 
garde les données en mémoire (pas de garbage collect) tant que 
l'application n'a pas besoin de cette mémoire. Si c'est le cas, l'objet 
est viré, et sera éventuellement rechargé plus tard si l'utilisateur en 
a besoin. Cela semble être la panacée ?
        De façon générale, pouvez-vous me confirmer que c'est du côté du 
garbage collector et des systèmes de références qu'il faut que je 
regarde pour gérer de grosses quantités de données ?

        Aurélien Mazurie
  • RE: Manipulation de gros tableaux: 2 Erik Mazoyer