Newsgroup: it.comp.java
Titolo: Cronometrare il tempo di esecuzione di una funzione

Salve!
Come cronometro il tempo di esecuzione di una funzione?
(Questa funzione apre un file, ne legge il contenuto, lo passa ad un
engine di XQuery, preleva il risultato e lo risputa fuori...)
Io per ora ho fatto così:
...
long a = System.currentTimeMillis();
eseguiQuery();
return System.currentTimeMillis() - a;
Ma non sembra funzionare (Cache? Granularità timer di win32 troppo
bassa?)
Avete qualche metodo da propormi?
Grazie.
Ale

>Granularità timer di win32 troppo bassa?
Ti sei già risposto da solo...
Sotto i 10ms Win32 non è affidabile.
Il consiglio è effettuare un loop chiamando eseguiQuery() n volte:
questo ti darà risultati più affidabili. E' chiaro che se poi entrano
in gioco meccanismi di cache sei di nuovo inguaiato :)

Come cronometro il tempo di esecuzione di una funzione?
Puoi provare ad aumentare la risoluzione:
Pre jdk 1.5 "How do I use sun.misc.Perf?"
http://www.jsresources.org/faq_performance.html#sun_misc_perf
Post jdk 1.5
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#nanoTime()
--
Marco
*** Free account sponsored by SecureIX.com ***
*** Encrypt your Internet usage with a free VPN account from 
http://www.SecureIX.com
 ***

Probabilmente sbaglio qualcosa io, ma non riesco ad ottenere risultati
soddisfacenti usando il metodo proposto in:
Pre jdk 1.5 "How do I use sun.misc.Perf?"
http://www.jsresources.org/faq_performance.html#sun_misc_perf
Guardando qua e la ho trovato anche come possibilità quella di
utilizzare una librearia DLL scritta in C (e con tanto di codice ASM)
importata usando le JNI. Ci ho provato ma non sono riuscito a creare la
dll. Mi chiedevo a questo punto se non esistesse la dll già compilata
da utilizzare in java... Qualcuno sa qualcosa?
Sto impazzendo!
Grazie
Ciao

soddisfacenti usando il metodo proposto in:
<modalita_7_di_9>
definire "risultati soddisfacenti" e "non sembra funzionare"
</modalita_7_di_9>
Se il tempo misurato e' sempre molto basso la funzione non funziona ;-)


Esatto...
Correggo "risultati non soddisfacenti" con "non funziona" :)
Che io faccia un ciclo
for(int i = 0; i<10;i++)
System.err.println(i);
o che io faccia quest'altro ciclo
for(int i = 0; i<10000000;i++)
System.err.println(i);
Il risultato è sempre lo stesso (siamo su valori come 1 o addirittura
0...)
Sto puntando ancora sulla libreria DLL e le JNI... Ce l'ho quasi fatta,
compila senza errori, da solo un errore a runtime quando richiamo un
metodo della DLL... Se penso alla difficoltà iniziale avuta direi che
è un bel successone! :)
Vado a cercare di capire il perchè della UnsatisfiedLinkError
exception
Buon proseguimento!
Ale

0...)
CHE INVIDIA, MI CI VOGLIONO 82 SECONDI !
public class a {
public static void main(String[] args) {
  long s=System.currentTimeMillis();
  for(int i = 0; i<10000000;i++)
    System.err.println(i);
  System.out.println("elapsed:"+((System.currentTimeMillis()-s)/1000));
}
}
C:\TEMP>java a 2> NUL
elapsed:82


 ha scritto nel messaggio 
news:1143819663.5...@j33g2000cwa.googlegroups.com...


ciao, considera che cmq la cpu è divisa fra piu processi...
quindi il tempo effettivo è minore di quello che ottieni!
Sul mix di linguaggi mai provato a usare!