Je me sers d'un jtextarea, dans lequel j'écris pas mal de texte à l'aide de append(). Et ensuite, je récupère le contenu du textarea et je l'ajoute sur un flux de sortie PrintWriter vers un fichier txt.
Jusqu'à présent, j'écrivais normalement (avec des \n), et tout marchait bien, sauf que quand j'ouvrais le fichier txt, les 500 ou 600 lignes étaient pénibles à lire.
Alors j'ai voulu essayer d'écrire sur mon flux texte avec du code html, et en sortant vers un fichier html.
J'ai donc rajouté en début et fin de texte les balises <html> et </html>, et ça marche bien, j'ai un affichage satisfaisant, avec des couleurs,...
Le problème, c'est que depuis que j'ai fait ça, mon exécution est très lente. Après 1 heure à débugger, j'ai identifié le lieu du problème. Dans mon programme, je créé une grille, je la remplis d'amibes ou de nourriture. Ensuite, une fois la grille créée, je parcours chaque case une à une, et selon ce qu'elle contient, j'appelle une méthode pour afficher les caractéristiques de l'amibe ou de la nourriture présente.
Voici le code :
ici, la boucle de parcours des cases
ici, la méthode pour afficher les caractéristiques de l'amibe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for(int i=0;i<Grille.largeur;i++){ for(int j=0;j<Grille.largeur;j++){ if(grille.grille[i][j].contientAmibe) log.append(grille.afficherCaractAmibe(grille.grille[i][j].a)); else if(grille.grille[i][j].contientNour) log.append(grille.afficherCaractNourriture(grille.grille[i][j].nourriture)); } }
ici, la méthode pour afficher les caractéristiques de la nourriture
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
17
18
19
20
21
22
23
24
25
26
27
28
29 public String afficherCaractAmibe(Amibe am){ String s=""; String sexe=""; if(am!=null){ if(am.getSexe()==0) sexe+="mâle"; else sexe+="femelle"; int a=am.numCaseCourante/Grille.largeur; int b=am.numCaseCourante%Grille.largeur; s+="\nUne amibe a été placée sur la case à la ligne n°"+a+" et la colonne n°"+b+"."; s+="\nSes caracteristiques sont :"+ "\n- sexe : "+sexe+ "\n- age : "+am.getAge()+ "\n- ageMax : "+am.getAgeMax()+ "\n- energie : "+am.getEnergie()+ "\n- pince : "+am.getPince()+ "\n- venin : "+am.getVenin()+ "\n- machoire : "+am.getMachoire()+ "\n- carapace : "+am.getCarapace()+ "\n- epine : "+am.getEpine()+ "\n- antivenin : "+am.getAntiVenin(); s+="\n"; return s; } else { s="\nIl n'y a pas d'amibe à cet emplacement"; return s; } }
J'ai fait un test, pour mesurer le temps qui s'écoule entre le clic sur OK et l'affichage de la grille (puisque c'est cette étape qui prenait un temps fou depuis les modif)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public String afficherCaractNourriture(Nourriture n){ String s=""; int a=n.numCaseCourante/Grille.largeur; int b=n.numCaseCourante%Grille.largeur; s+="\n"+n.getNourriture()+" unités de nourriture ont été placées sur la case à la ligne n°"+a+" et la colonne n°"+b+"."; s+="\n"; return s; }
- en ayant remplacé les 15 \n par des <br> de afficherCaractAmibe, j'ai enregistré, relancé l'exécution. entre le clic sur ok et l'affichage, j'ai mesuré env 1,3s
- en reprenant la méthode afficherCaractAmibe modifiée et en remplaçant les 2 \n par des <br>, là, je mesure 22,7 secondes !!
Que se passe t il? Est ce un pb de surchage mémoire? est ce le html qui pose problème ?
NB : je précise que je n'ai pas besoin de voir le texte stocké dans le textarea (de toute façon, avec les balises html, il est illisible), celui ci ne me sers qu'à stocker le texte en attendant d'être copié sur le flux texte
Partager