Newsgroup: it.comp.java
Titolo: Jave e CPU

Salve a tutti
Ho un problema ! Ho realizzato una semplice applicazione java per verificare
come implementare un nuovo tipo di evento personalizzato. L'applicazione
consiste in un frame contenente un panello nel quale ho disegnato
semplicemente un rettangolo di dimensione 200x200 pixel... all'interno di
questo rettangolo si muove una piccola figura geometrica (rettangolo di
dimensione 4x4 pixel) il cui movimento è generato a caso ! Il metodo che
genera casualmente le coordinate di destinazione per ogni movimento in linea
retta del piccolo rettangolo, è stato impostato per poter generare anche
coordinate leggermente esterne al rettangolo di 200x200 pixel;
Ho quindi implementato un nuovo evento che avvisa il listener ogni volta che
il punto in movimento sconfina oltre i limiti del rettangolo di 200x200
pixel. Per testare il tutto ho fatto in modo che ad ogni evento di nuovo
tipo generato venga stampato sulla console "OUT". Funziona tutto
perfettamente nonostante la mia inesperienza nella programmazine in java
come di qualsiasi altro linguaggio di programmazione.
Ho pero' notato ( non avrei potuto farne a meno ), che dopo pochi secondi di
esecuzione dell'applicazione, il mio computer comincia ad attaccare ventole
e comincia a gracidare e/o gracchiare ( come se implorasse pieta!? ); Con il
task manager di windows ho constatato che l'applicazione sfrutta le risorse
della mia CPU al 100% ...COSA SIGNIFICA QUESTO ? ... il "gracchiamento" del
mio pc dipende da questo sfruttamento intensivo della CPU? ed inoltre ... è
normale che una applicazione sfrutti cosi' tanto la CPU? ... è piu'
probabile che sia limitato il mio pc oppure che ho realizzato la mia
applicazione java seguendo una pessima linea di programmazione ( cosa
possibilissima :) ? ... Posso risolvere in qualche modo ? come devo
intervenire ?
Grazie a tutti
Ciao Stefano

 ... Posso risolvere in qualche modo ? come devo intervenire ?
Mah, dovresti darci + informazioni, magari con un po di codice; una 
soluzione si trova di sicuro...
Marco
-- 
reply: remove duh.spam.
http://cthulhu.ticinocom.ch

 intervenire ?
Probabilmente il tuo pc è abbastanza recente, e aumenta la velocità 
delle ventole in base al fabbisogno. Cmq dipende sicuramente dal tuo 
programmino: purtroppo java non ha un sistema efficientissimo per 
disegnare a video, e occupa molta cpu. Ho avuto lo stesso problema agli 
inizi, e ho risolto incapsulando la routine di disegno a video in un 
thread e, se usi swing, attivate il double buffering sul JPanel per 
migliorare la fluidità.
Aloha


Ciao Dario
Grazie per l'aiuto!
Non ho ben capito cosa intendi dire per " incapsulare la routine di disegno
a video in un thread" ma io ho provato a sostituire il metodo che mi
controllava il movimento del punto e il repaint del pannello ( metodo questo
esterno al metodo paintComponent e chiamato da paintComponent ), nel metodo
run() di un thread, e quindi a gestire il ridisegno attraverso un Thread. Il
risultato è stato ottimo! Ho abbassato lo sfruttamento della cpu da 100% a
40/50%  facendo "sonnecchiare" il thread per 5 millisecondi; Successivamente
ho provato ad aggiungere al pannello altri rettangolini ( una decina per la
precisione contro uno dell'applicazione precedente ) e metterli in
movimento; la cpu mi è risalita al 100% dovento gestire un lavoro 10 volte
superiore al precedente. Ho provato a far dormire il Thread di controllo per
un tempo maggiore (10/20 millisecondi) e la cpu mi è scesa a livelli
soddisfacenti ma cosi' facendo ho dovuto pagare lo scotto di avere un
movimento dei rettangolini intermittente ( a scatti ). E' possibile
migliorare ulteriormente ? secondo te posso riuscire ad ottenere buona
fluidita' di movimento anche popolando il pannello con piu' d'un
rettangolino? parlavi di attivare il doppio buffering sul JPanel .. ma
paintComponent non gestisce gia' di per se' il doppio buffering ?
cmq, grazie ancora
STEFANO

 ha scritto nel messaggio
news:2s5il8F...@uni-berlin.de...
