|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
[JAVA]Tempo esecuzione codice
Come posso sapere quanto ci mette in termini di tempo ad eseguire due pezzi di codice diverso?
In particolare vorrei sapere se fa prima a fare: Codice:
if(buffer.getRGB(x,y)==buffer.getRGB(0,0)) o fa prima a fare: Codice:
if(matr[x][y]) Qual'è il più veloce nell'esecuzione? |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Feb 2005
Messaggi: 295
|
puoi provare ad utilizzare questo codice (sinceramente l'ho usato solo una volta ma su una procedura intera...non so se esistono dei comandi fatti apposta per questo):
Codice:
Calendar date1 = Calendar.getInstance(); if(buffer.getRGB(x,y)==buffer.getRGB(0,0)) Calendar date2 = Calendar.getInstance(); (float)(date2.getTime().getTime()-date1.getTime().getTime())/1000) forse nel tuo caso anzichè 1000 dovresti usare 10000 o 100000... puoi fare la stessa cosa con if(matr[x][y]) |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Mmmm mi da sempre 0.0...
|
![]() |
![]() |
![]() |
#4 |
Bannato
Iscritto dal: Jan 2003
Città:
Messaggi: 4421
|
...ciao...
...potresti provare con... float inizio = System.getCurrentMills(); ...tuo codice... float fine = System.getCurrentMills()-inizio; ...è codice scritto al volo...non sono certo della sintassi... ...ciao... |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Ad ogni modo, ti consiglio di non dividere: otterrai il risultato in millisecondi, che e' una ragionevole misura per quello che vuoi fare. Altro consiglio: il tempo di una singola operazione come quella in esame, e' difficile da prendere, visto che verra' eseguita in un tempo molto piccolo. Fortunatamente, l'operazione che vuoi misurare puo' essere ripetuta (ovviamente non sempre sei in questa condizione). Se metti in un ciclo Calendar start_time = Calendar.getInstance(); for (int i = 0; i < 1000000; i++) operazione_sotto_osservazione(); Calendar end_time = Calendar.getInstance(); ecco che i microsecondi diventano secondi, e le differenze temporali fra le due operazioni si moltiplicano. High Flying Sottovento
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Dec 2002
Messaggi: 3359
|
Ho fatto come mi hai detto!
Grazie funziona benissimo così, non pensavo ci fosse così tanta differenza e invece...incredibile... Con questo codice mi stampa un valore di circa -3600 (perchè negativo poi?): Codice:
import java.awt.image.*; import java.awt.*; import javax.swing.*; import java.util.*; public class Tempo { public static void main(String[] args) { PixMap buffer=new PixMap("./s0.png"); boolean[][] matr=buffer.matricePixel(); BufferedImage bf=buffer.bufferImm(); System.out.println("START..."); for(int j=0;j<10;j++){ Calendar start_time = Calendar.getInstance(); for (int i=0;i<10000000;i++){ boolean b=bf.getRGB(20,20)==bf.getRGB(0,0); } Calendar end_time = Calendar.getInstance(); System.out.println("Ciclo n"+j+"="+(start_time.getTime().getTime()-end_time.getTime().getTime())); } } } Codice:
import java.awt.image.*; import java.awt.*; import javax.swing.*; import java.util.*; public class Tempo { public static void main(String[] args) { PixMap buffer=new PixMap("./s0.png"); boolean[][] matr=buffer.matricePixel(); BufferedImage bf=buffer.bufferImm(); System.out.println("START..."); for(int j=0;j<10;j++){ Calendar start_time = Calendar.getInstance(); for (int i=0;i<10000000;i++){ boolean b=matr[20][20]; } Calendar end_time = Calendar.getInstance(); System.out.println("Ciclo n"+j+"="+(start_time.getTime().getTime()-end_time.getTime().getTime())); } } } |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
High Flying Sottovento
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
si puo fare una cosa del genere in C/C++ ?
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Se hai la possibilita' di eseguire delle ripetizioni del comando, come in questo caso, puoi usare la time() (ti restituisce il numero di secondi trascorsi dal 1/1/1970). In alternativa, molte implementazioni su diversi sistemi operativi ti danno a disposizione dei metodi piu' precisi, che possono arrivare fino ai nanosecondi. Usando la time: time_t start = time(NULL); <Operazioni di cui vuoi verificare il tempo> time_t stop = time(NULL); tempo_trascorso = stop - start; High Flying Sottovento
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
grazie.
ma se l'operazione da verificare venisse eseguita in meno di un secondo come posso fare per avere il risultato in millisecondi? |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:41.