Bonjour,
Je doit ajouter des lignes a mon JTextarea (plusieurs milliers) dans une boucle (j'utilise StringBuilder pour concaténer) ça devient vite très très lent a l'affichage comment faire pour optimiser ?
Version imprimable
Bonjour,
Je doit ajouter des lignes a mon JTextarea (plusieurs milliers) dans une boucle (j'utilise StringBuilder pour concaténer) ça devient vite très très lent a l'affichage comment faire pour optimiser ?
Salut,
Je ne comprends pas ce que vient faire un StringBuilder dans la notion d'ajout de lignes à un JTextArea (ou plutôt, j'ai peur de comprendre, que tu remplaces le texte complet, au lieu d'utiliser la méthode insert(String str, int pos)). De toute manière, la gestion du modèle de document a ses limites, donc tu auras forcément un ralentissement sur certains fonctionnalités (sauvegarde par exemple, copier tout...). Combien de milliers de lignes tu affiches ? plutôt 3 ou plutôt 150 ? Des lignes de combien de caractères ? Peut-être se poser la question de la pertinence d'un JTextArea, ou d'un composant unique ? Ou d'autres artifices... Dans mon application, j'utilise un composant basé sur le JEditorPane : j'ai des articles de 15000 ou 20000 signes (en html) en production, et l'édition n'est pas la partie la plus lente (je viens de faire un test, et ça se met à ramer vers 300000 lignes (plus de 10 millions de caractères), mais faut dire que la mémoire est montée à 600 Mo pour l'application,( et que j'ai 4 éclipses ouverts plus un indesign ;)), et que j'ai l'impression qu'il y a un problème avec le comptage de lignes qui peine un peu (merci pour m'avoir, indirectement, mis le doigt sur ce problème ;))).
Salut le StringBuilder vient juste pour concaténer la chaîne de caractères que j'ajoute avec la méthode setText j'ai essayer avec insert que je ne connaissait pas c'est carrément plus rapide de plus j'ai retirer la concaténation donc plus de souci sinon il s'agit d'environ 10.000 lignes (pas toujours le cas) pas trés longues merci je met en résolu
10000 lignes : le JTextArea devrait pouvoir les supporter sans problème et sans ralentissement. C'est sûr que si tu fais des setText(), il faut que le composant reconstruise tout le modèle à chaque fois, alors qu'avec insert, seuls les nouveaux caractères vont être transformés en fragment de modèle, qui sera ajouté à la fin du modèle, et ce sera beaucoup plus rapide.