Mon applet est une usine a gaz [optimisation et solution inside]

Mon applet est une usine a gaz [optimisation et solution inside] - Programmation

Marsh Posté le 08-08-2002 à 22:32:40    

tout ceux qui l on essayé Zion Antp, cherrytree et j en passe on remarqué l extreme gourmandise de mon applet
 
si certain d entre vous  pouvait me donner des conseils ce serai cool
 
 
la premiere question qui me vien:
 

  • Dans une appli classique ,j instancie mes composants et ensuite je les place ds une frame

mais ds une applet? ne doit je pas plutot placer les composant ds la methode paint()?  
enfin j aimerait savoir exactement ce que je doit mettre ds cette fichu methode car il y a des probleme de rafraichissement de l image :/
 

  • Comment vous faite pour connaitre les endroit de vos programme qui consomme le plus de cpu !?

merci de votre aide


Message édité par veryfree le 13-08-2002 à 22:59:25
Reply

Marsh Posté le 08-08-2002 à 22:32:40   

Reply

Marsh Posté le 08-08-2002 à 22:37:52    

heu j'ai rien dit moi au niveau de sa "gourmandise" , je trouvais juste que ça lagguait à mort :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-08-2002 à 22:48:19    

si mes souvenirs sont bon tu es en V90 right?
 
Intstalle ton applet sur un server qui a un bon upload et là tu pourras faire des tests réels. Il ne faut pas oublier la communication entre l'applet et la servlet.
 
En ce qui concerne l'applet elle meme, tout dépend de la puissance de la machine.
 
A mon avis le lag provient du réseau.  
 
:hello:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 08-08-2002 à 22:59:54    

DarkLord a écrit a écrit :

si mes souvenirs sont bon tu es en V90 right?
 
Intstalle ton applet sur un server qui a un bon upload et là tu pourras faire des tests réels. Il ne faut pas oublier la communication entre l'applet et la servlet.
 
En ce qui concerne l'applet elle meme, tout dépend de la puissance de la machine.
 
A mon avis le lag provient du réseau.  
 
:hello:




 
merci de ton aide  
mais il me faut preciser qu il n y a pas de servlet deriere
et que Zion l'a utiliser et le chat consommait 100% de son cpu ...
Note importante :Zion a un proc  de 1.4 G si mes souvenir sont bon  :sweat:

Reply

Marsh Posté le 08-08-2002 à 23:01:34    

sinon pour ce qui est de mon V90 , a l heure actuelle jpe pas changer de serveur tout simplement parce que j en ai pas d'autre  
 
chez free on pas pas executer de programme c'est la tout le probleme
[:spamafote]


Message édité par veryfree le 08-08-2002 à 23:02:17
Reply

Marsh Posté le 08-08-2002 à 23:12:11    

[:toad666]  [:toad666]  [:toad666]  
 
Quand le sale gnome java est arrivé dans ma traybar, c'est monté à 100% de CPU, et même après avoir killé ton applet, ce * voulait plus me lacher, ni moi ni mon CPU!
 
J'ai du rebooter, et franchement avec les 50 trucs ouverts au bon endroit, ca me bourre de rebooter!
 
 [:toad666]  [:toad666]  [:toad666]  
 


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 08-08-2002 à 23:12:54    

Prochaine fois j'essaie ca sur une machine virtuelle  :p


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 08-08-2002 à 23:15:32    

Zion a écrit a écrit :

 [:toad666]  [:toad666]  [:toad666]  
 
Quand le sale gnome java est arrivé dans ma traybar, c'est monté à 100% de CPU, et même après avoir killé ton applet, ce * voulait plus me lacher, ni moi ni mon CPU!
 
J'ai du rebooter, et franchement avec les 50 trucs ouverts au bon endroit, ca me bourre de rebooter!
 
 [:toad666]  [:toad666]  [:toad666]  
 
 




 
 
t es sous windows?
 
really sorry   :sweat:

Reply

Marsh Posté le 08-08-2002 à 23:20:40    

veryfree a écrit a écrit :

 
 
 
t es sous windows?
 
really sorry   :sweat:  




 
Benh j'étais sous Explorer, je t'ai bien dis que Opera et Mozilla ca marchait pas...  
 
Enfin, spa grave, j'ai survécu, mais c'est chiant :/


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 08-08-2002 à 23:30:24    

est ce que ca rame dans applet viewer?


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 08-08-2002 à 23:30:24   

Reply

Marsh Posté le 08-08-2002 à 23:51:54    

SchnapsMann a écrit a écrit :

est ce que ca rame dans applet viewer?




 
jcroi pas que ce soir possible de lancer une applet de chat ds l appletviewer pour la simple raison qu elle doit etre téléchargée a partir du serveur...
 
 
jvai essayé qd meme

Reply

Marsh Posté le 08-08-2002 à 23:56:13    

je ne vois pas pourquoi tu ne pourrais pas essayer ton applet en local?  :??:


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 08-08-2002 à 23:57:28    

SchnapsMann a écrit a écrit :

je ne vois pas pourquoi tu ne pourrais pas essayer ton applet en local?  :??:  




si en local mais pas avec l appletviewer, jvien d essayé a l instant et il met "probleme lors de la lecture du fichier {0}" enfin c chelou mais je pense pas que mon probleme se situe la en fait

Reply

Marsh Posté le 09-08-2002 à 00:10:38    

As tu créé des widgets avec des méthodes de dessin custom ( paint(), paintComponent(), paintChildren()...) ?


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 09-08-2002 à 00:15:29    

SchnapsMann a écrit a écrit :

As tu créé des widgets avec des méthodes de dessin custom ( paint(), paintComponent(), paintChildren()...) ?




 
 

Citation :

Dans une appli classique ,j instancie mes composants et ensuite je les place ds une frame
mais ds une applet? ne doit je pas plutot placer les composant ds la methode paint()?  
enfin j aimerait savoir exactement ce que je doit mettre ds cette fichu methode car il y a des probleme de rafraichissement de l image


 
c la tout mon probleme
je sait pas quoii mettre ds paint au juste....
merci de ton aide


Message édité par veryfree le 09-08-2002 à 00:18:05
Reply

Marsh Posté le 09-08-2002 à 00:40:38    

Applet ou appli, c'est pareil pour ce qui est du fonctionnement du dessin :
 
- sois tu crée ton ui en utilisant container.add(composant) en configurant un layout manager approprié : dans ce cas c'est la méthode paint par défaut qui est utlisée (elle paint le fond du contenant, puis appelle la méthode paint des composant contenus en les disposant selon les directives du layout manager)
 
- sois tu redéfinis paint(), et à ce moment là tu dessines dans le composant selon ton bon vouloir
 
Il faudrait que je vois ton appli tourner, ou que tu balances le source; en effet ce n'est pas dis que ce soit le dessin qui rame.
 
 [:zebra33]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 09-08-2002 à 01:04:23    

SchnapsMann a écrit a écrit :

Applet ou appli, c'est pareil pour ce qui est du fonctionnement du dessin :
 
- sois tu crée ton ui en utilisant container.add(composant) en configurant un layout manager approprié : dans ce cas c'est la méthode paint par défaut qui est utlisée (elle paint le fond du contenant, puis appelle la méthode paint des composant contenus en les disposant selon les directives du layout manager)
 
- sois tu redéfinis paint(), et à ce moment là tu dessines dans le composant selon ton bon vouloir
 
Il faudrait que je vois ton appli tourner, ou que tu balances le source; en effet ce n'est pas dis que ce soit le dessin qui rame.
 
 [:zebra33]  




 
si t es la fait signe et je lance le serveur...

Reply

Marsh Posté le 09-08-2002 à 08:46:52    

100% CPU, c'est bizarre, quand même...Je parierai plutôt sur une boucle infinie, ou une Thread qui a pas de yield() ou de timeout dans son run....enfin, je sais pas ce que vous en pensez, mais bon..
 
Donc, à mon avis, cherche dans les classes de communucation réseau (genre, si la lecture sur la socket est pas bloquante, du style BufferedReader.readLine()..des trucs comme ça, etc..) et dans les classes où tu as des threads....
 
Pis a la limite, fait péter le code, ça aidera, non??

Reply

Marsh Posté le 09-08-2002 à 14:21:38    

gfive a écrit a écrit :

100% CPU, c'est bizarre, quand même...Je parierai plutôt sur une boucle infinie, ou une Thread qui a pas de yield() ou de timeout dans son run....enfin, je sais pas ce que vous en pensez, mais bon..
 
Donc, à mon avis, cherche dans les classes de communucation réseau (genre, si la lecture sur la socket est pas bloquante, du style BufferedReader.readLine()..des trucs comme ça, etc..) et dans les classes où tu as des threads....
 
Pis a la limite, fait péter le code, ça aidera, non??




 
 
Pis a la limite, fait péter le code, ça aidera, non??
 
c'est vraiment tres long alors je montre un extrait:
 

Code :
  1. public void run()
  2.  {
  3.         String phraseLu = "";   
  4.   try
  5.   {
  6.           do
  7.           {
  8.      phraseLu = in.readLine();
  9.      if(phraseLu.length()!=0)
  10.      {
  11.       if(phraseLu.startsWith("ADD" ))
  12.       mainPanel.addElement(phraseLu.substring(3));
  13.       else if(phraseLu.startsWith("REM" ))
  14.       mainPanel.removeElement(phraseLu.substring(3));
  15.       else if(phraseLu.startsWith("@@PV" ))
  16.       pvTask(phraseLu);
  17.       else if(!phraseLu.equals("" ))
  18.       setText(phraseLu);
  19.      }
  20.        }while(phraseLu!=null);
  21.   }
  22.       catch(Exception exception)
  23.       {
  24.     
  25.        setText("03Connexion interrompue\n\n" );
  26.       tabbedPane.setSelectedIndex(INDEX_OF_CHAT_TAB);
  27.     
  28.       }
  29.  }


 
il faut que je modifie ca donc?  
 
 
merci de ton aide

Reply

Marsh Posté le 09-08-2002 à 14:26:22    

Pas forcément, j'ai dit que c'était un hypothèse...
Dans ton code, in, c'est un BufferedReader?
Déjà, mettre l'analyse du message dasn cette méthode, c'est pas top : c'est pas évolutif du tout!!  
 
Enfin, c pas grave...essaie d'ajouter un Thread.yield() à la fin de ta boucle :
 
Le code de la méthode équivalent de mon client Chat :
 
 

Code :
  1. public void run() {
  2.         String line;
  3.         while (network != null) {
  4.             try {
  5.                 if ((line = reader.readLine()) != null) {
  6.                     fireEvent(line);
  7.                 } else {
  8.                     fireEvent(NetworkEvent.SERVERDIED);
  9.                 }
  10.             } catch (IOException ioe) {
  11.                 fireEvent(NetworkEvent.SERVERDIED);
  12.             }
  13.             network.yield();
  14.         }
  15.     }


 
(network, c'est la thread...koi, c'est nu nom à la con?? :D


Message édité par gfive le 09-08-2002 à 14:26:54
Reply

Marsh Posté le 09-08-2002 à 14:48:05    

il s agis bien d'un bufferedReader:
 

out = new PrintStream(socket.getOutputStream());
 in = new BufferedReader( new InputStreamReader(socket.getInputStream()));


 
 
et pour le yield; ca va endormir le thread c bien ca?
 
combien de temps?
 
bon j essaye des que je peux
la jdoit allé faire des courses
merci encore  :jap:


Message édité par veryfree le 09-08-2002 à 14:48:36
Reply

Marsh Posté le 09-08-2002 à 15:14:22    

veryfree a écrit a écrit :

 
et pour le yield; ca va endormir le thread c bien ca?
combien de temps?




 
Ca dit juste : je passe mon tour.
En gros il laisse les autres threads s'executer et reprends la main quand c'est a nouveau son tour.

Reply

Marsh Posté le 09-08-2002 à 15:41:55    

lorill a écrit a écrit :

 
 
Ca dit juste : je passe mon tour.
En gros il laisse les autres threads s'executer et reprends la main quand c'est a nouveau son tour.  




ouais. Ca ne l'endormit pas, ca dit juste "si y a d'autres threads (ou process) qui ont quelque chose à faire, allez-y ! pour le moment pour moi y a pas d'urgence"

Reply

Marsh Posté le 09-08-2002 à 17:45:55    

cool merci pour l eclaircissement  :jap:

Reply

Marsh Posté le 09-08-2002 à 17:50:26    

si y en a qui veulent venir essayer et me dire si c toujours aussi gourmand:
 
http://veryfree.dns2go.com
 
si ca vous soule de vous creer un  compte bien que cela prennet 1 min essayé  
user : test
pass: test
 
voila  

Reply

Marsh Posté le 09-08-2002 à 18:06:32    

bah, sous Mozilla, ça marche pas! :D
J'ai créé un compte, et il me loggue pas!

Reply

Marsh Posté le 09-08-2002 à 18:09:17    

gfive a écrit a écrit :

bah, sous Mozilla, ça marche pas! :D
J'ai créé un compte, et il me loggue pas!




 
ok ok
 
de toute facon y a un probleme de compatibilité avec le plug in
t a pas ie qui traine?
 
moi je télécharge mozilla pour resoudre le probleme
 :jap:
 
edit 10 Mo ca risque d etre long  :sweat:


Message édité par veryfree le 09-08-2002 à 18:11:24
Reply

Marsh Posté le 09-08-2002 à 18:13:42    

bah, je suis au boulot, là, donc, sous Linux, mais le plugin, je l'ai : mon applet à moi, faut bien que je la teste, aussi! :D
Mais tiens, une bête question : y'a un serveur, à l'autre bout?? ou l'applet fait des requêtes HTTP??

Reply

Marsh Posté le 09-08-2002 à 18:19:34    

gfive a écrit a écrit :

bah, je suis au boulot, là, donc, sous Linux, mais le plugin, je l'ai : mon applet à moi, faut bien que je la teste, aussi! :D
Mais tiens, une bête question : y'a un serveur, à l'autre bout?? ou l'applet fait des requêtes HTTP??




oui oui il y a un serveur ecrit par mes soins qui doit vraiment pas etre optimiser, il tourne sur ma machine mais j ai jamais eu plus de 15 requetes simultané alors je sait pas ce qu il vaux...
sinon le tout est hebergé sur ma machine windows + easyphp :/ + rtc  
voila
 
ps:je crois que j ai réglé  le probleme d authentification  
j ai pas essayé ca doxwnload encore la  :D

Reply

Marsh Posté le 09-08-2002 à 18:25:38    

ouais, je suis authentifié...Mais y'a pas d'applet.. :D

Reply

Marsh Posté le 09-08-2002 à 18:27:56    

gfive a écrit a écrit :

ouais, je suis authentifié...Mais y'a pas d'applet.. :D




t a cliqué sur le bouton chat?
et rien n apparait?


Message édité par veryfree le 09-08-2002 à 18:28:18
Reply

Marsh Posté le 09-08-2002 à 18:35:25    

bah, en fait, les deux premiers items de menu n'apparaissent pas.. :D
Browser-Compatibility powaaaa!! :D

Reply

Marsh Posté le 09-08-2002 à 18:40:19    

gfive a écrit a écrit :

bah, en fait, les deux premiers items de menu n'apparaissent pas.. :D
Browser-Compatibility powaaaa!! :D




a oui c problematique lol
 
j avait suivi les conseils de kasayax en fait ca  avait l air super son truc de feuille de style c etait troop bo pour etre vrais  :(  
 
merci de ton aide
les test c pas pour tout de suite alors....  :cry:


Message édité par veryfree le 09-08-2002 à 18:41:05
Reply

Marsh Posté le 09-08-2002 à 21:48:02    

veryfree a écrit a écrit :

 
a oui c problematique lol
 
j avait suivi les conseils de kasayax en fait ca  avait l air super son truc de feuille de style c etait trop bo pour etre vrai  :(  
 
merci de ton aide
les test c pas pour tout de suite alors....  :cry:




bon ben tout est réparé  :D  
 
ca m a pris du temps qd meme
le site est compatible mozilla et opera  :hello:  

Reply

Marsh Posté le 12-08-2002 à 01:06:14    

bon ben non en fait
ca comsome moins mais c tj trop
je sais pas quoi faire
 
d une maniere générale, qu est ce qui consomme beaucoups mis a part les thread?  

Reply

Marsh Posté le 12-08-2002 à 09:34:12    

des threads mal synchronisées :)
 
surtout si elle bosse sur des IO
 
tu as un mis un socket timeout sur la socket que tu crée au moins, pour que la lecture ne soit pas bloquante?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 12-08-2002 à 10:06:40    

[:blueflag]


---------------
Le site de ma maman
Reply

Marsh Posté le 12-08-2002 à 17:14:35    

DarkLord a écrit a écrit :

des threads mal synchronisées :)
 
surtout si elle bosse sur des IO
 
tu as un mis un socket timeout sur la socket que tu crée au moins, pour que la lecture ne soit pas bloquante?




ben au niveau du client, il n y a qu un seul thread donc pas de prob de syncro (dite moi si jme trompe)
sinon
la je suis pas chez moi mais j'essaye ce soir le timeout...
 
 
 
merci de ton aide  :hello:

Reply

Marsh Posté le 12-08-2002 à 18:55:29    

veryfree a écrit a écrit :

 
ben au niveau du client, il n y a qu un seul thread donc pas de prob de syncro (dite moi si jme trompe)
sinon
la je suis pas chez moi mais j'essaye ce soir le timeout...
 
 
 
merci de ton aide  :hello:  




 
oui synchronisée n'était pas le mot que j'aurai du utiliser. En réalité, si tu as une thread qui lit et qui attends des informations (par exemple une réponse du serveur, ou le serveur attend un commande du client). il faut pas qu'il attende comme un con pendant des heures sinon à terme ca va bouffer des ressources.
 
Solution qd tu crées ta socket tu lui associes un timeout de quelques seconds. Périodiquement tu vas voir que ton instruction read va partir en timeout et ca te permet d'un peu relacher les ressources et éviter le genre de probs que tu as. Je ne dis pas que c'est LA solution, je dis que ca peut etre une bonne piste.
 
bonne chance


Message édité par darklord le 12-08-2002 à 18:55:44

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 12-08-2002 à 20:28:39    

DarkLord a écrit a écrit :

 
 
oui synchronisée n'était pas le mot que j'aurai du utiliser. En réalité, si tu as une thread qui lit et qui attends des informations (par exemple une réponse du serveur, ou le serveur attend un commande du client). il faut pas qu'il attende comme un con pendant des heures sinon à terme ca va bouffer des ressources.
 
Solution qd tu crées ta socket tu lui associes un timeout de quelques seconds. Périodiquement tu vas voir que ton instruction read va partir en timeout et ca te permet d'un peu relacher les ressources et éviter le genre de probs que tu as. Je ne dis pas que c'est LA solution, je dis que ca peut etre une bonne piste.
 
bonne chance




 
juste une petite question avant de faire des betises:
 

Citation :

If the timeout expires, a java.io.InterruptedIOException is raised, though the Socket is still valid.


 
si j ai bien compris, si personne ne parle sur le chat la methode qui lit le flux entrant de la socket devrai lever l exception java.io.InterruptedIOException et ca libere les ressources c bien ca? mais la methode ReadLine() associée a ce flux est toujours valables?
 
j ai mis 3000 ms pour le timeout
sinon je fait appel a cette methode qu un fois n est ce pas?
 
 socket = new Socket(host,port);  
  socket.setSoTimeout(3000);
....
public void run(){
 
try{
monFlux.readLine();
}catch(InterruptedIOException ioe){...}catch(IOException ie){...}
 
}
 
c bien comme ca?


Message édité par veryfree le 12-08-2002 à 20:34:36
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed