Oppure

Loading
24/01/09 21:08
NicobhC
Buonasera ragazzi, vado subito al dunque..
Per "estrarre" dei valori da un file nel minor tempo possibile è preferibile fare

fscanf(fp, "%d", &v1);
fscanf(fp, "%d", &v2);
fscanf(fp, "%d", &v3);


o

fscanf(fp, "%d %d %d", &v1, &v2, &v3);


Se poi mi sapete consigliare un qualche programma che giri su windows che misuri il più accuratamente possibile il tempo di esecuzione dei programmi ve ne sarei molto grato :D
aaa
25/01/09 0:00
pierotofy
Beh così ad occhi direi che fare una sola chiamata anzichè 3 è più veloce, ma per fare un benchmark abbastanza accurato puoi registrare il tickcount prima di far partire l'algoritmo, fare la stessa cosa alla fine, fare la differenza dei due ticks e ottieni il numero di millisecondi che sono passati dall'inizio alla fine.
Il mio blog: piero.dev
25/01/09 0:34
NicobhC
E come si fa più precisamente?
aaa
25/01/09 1:41
eddiewrc
dunque..
prima di tutto devi documentarti su come funziona la scanf: se ogni scanf corrisponde a una system call allora significa che fare 3 scanf "costa" + di una sola, ma se invece ogni lettura è una sys call singola allora nn c'è differenza su quante scanf usare. (io nn so così precisamente come agisce).

seconda cosa, se ci tieni alla velocità io ti consiglio di usare invece di fscanf le funzioni per lavorare sui file che x quanto ne so sono le + veloci che il C fornisce: fread e fwrite!
specifiche, uso e argomenti (che sono molto semplici) le puoi trovare ovunque.

infine, per misurare la velocità di esecuzione c'è un metodo molto semplice:
prima del blocco di codice da cronometrare scrivi
time_t fine, start = time(NULL);
{codice}
fine = time(NULL);
printf("\nTempo trascorso = %d sec\n", difftime(fine, start));

che ti restituirà il numero di secondi trascorso.
se nn funziona (ma te ne accorgi dal segno) inverti gli argomenti di diffitime o usa un altro descrittore invece di %d (%lf x es)
aaa
25/01/09 8:31
NicobhC
Postato originariamente da eddiewrc:

infine, per misurare la velocità di esecuzione c'è un metodo molto semplice:
prima del blocco di codice da cronometrare scrivi
time_t fine, start = time(NULL);
{codice}
fine = time(NULL);
printf("\nTempo trascorso = %d sec\n", difftime(fine, start));

che ti restituirà il numero di secondi trascorso.
se nn funziona (ma te ne accorgi dal segno) inverti gli argomenti di diffitime o usa un altro descrittore invece di %d (%lf x es)


Il metodo funziona, però mi stampa solo i secondi, mentre a me servirebbe sapere almeno i centesimi (meglio i millesimi) di secondo.. Come si può fare? 8-|
aaa
25/01/09 14:30
eddiewrc
cerca nelle funzioni di time.h delle funzioni che facciano al caso tuo!
aaa
25/01/09 15:21
NicobhC
Ok grazie ^^
aaa
26/01/09 13:26
gioser
se sei in Windows e vuoi delle misure di tempo ad alta risoluzione, guarda la

QueryPerfomanceCounter()

e la

QueryPerformanceFrequency()

ovviamente non si tratta di funzioni ANSI C

msdn.microsoft.com/en-us/library/…(VS.85).aspx

ciao :)
aaa