Discussione:
Cronometrare il tempo di esecuzione di una funzione
(troppo vecchio per rispondere)
Ale
2006-03-31 12:58:50 UTC
Permalink
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
Bingo
2006-03-31 13:05:53 UTC
Permalink
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 :)
Marco Trevisan
2006-03-31 13:24:35 UTC
Permalink
"Ale" wrote in message
Post by Ale
Salve!
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 ***
Ale
2006-03-31 14:52:54 UTC
Permalink
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
Marco Trevisan
2006-03-31 15:10:54 UTC
Permalink
Post by Ale
Probabilmente sbaglio qualcosa io, ma non riesco ad ottenere risultati
<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 ;-)

--
Marco


*** Free account sponsored by SecureIX.com ***
*** Encrypt your Internet usage with a free VPN account from http://www.SecureIX.com ***
Ale
2006-03-31 15:41:03 UTC
Permalink
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
Marco Trevisan
2006-03-31 15:58:12 UTC
Permalink
"Ale" wrote in message
Post by Ale
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...)
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

--
Marco


*** Free account sponsored by SecureIX.com ***
*** Encrypt your Internet usage with a free VPN account from http://www.SecureIX.com ***
scoffer
2006-03-31 16:00:45 UTC
Permalink
Ciao,
l'unsatisfied link error potrebbe essere dovuto al fatto che se tu richiami
la dll da una classe che ha un package non ti funzionerà mai!!

"Ale" <***@freemail.it> ha scritto nel messaggio news:***@j33g2000cwa.googlegroups.com...
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
Stefanomnn
2006-04-01 11:54:19 UTC
Permalink
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!

Loading...