View Full Version : [c] migliorare prestazioni del programma
ho notato che questa parte di codice appesantisce molto lo script (senza ci mette circa la metà)...
if((x%1048576)==0)
printf("%dMb\n",(x/1048576));
come avvelocizzarlo senza perdere la funzione che segna quanti megabyte sono stati processati??
si puo poi velocizzare anche il resto del programma??
grazie mille:D
#include <stdio.h>
int main (void){
char nomefile[20];
scanf("%s",nomefile);
printf("%s!\n",nomefile);
char *buf;
buf = new char [1];
FILE *f, *f_out;
if ((f = fopen(nomefile, "rb")) && (f_out = fopen("cript.crp", "wb")))
{
size_t b;
long x=0;
while( b= fread( buf, 1, 1, f) ) {
buf[0]=buf[0]+1;//cifratura
x++;
if((x%1048576)==0)
printf("%dMb\n",(x/1048576));
fwrite( buf, 1, b, f_out);
}
pclose(f);
fclose(f_out);
}
return 0;
}
penso che il problema sia la stampa a video, non la condizione.
penso che il problema sia la stampa a video, non la condizione.
ma la stampa a video avviene solo ogni megabyte...
cmq ho aumentato al grandezza del buffer, ora leggo 64.000 byte alla volta e nn piu uno alla volta!! così va mooolto piu veloce, ma voglio sapere se posso migliorarlo ancora... qualche idea???:p
ma la stampa a video avviene solo ogni megabyte...
cmq ho aumentato al grandezza del buffer, ora leggo 64.000 byte alla volta e nn piu uno alla volta!! così va mooolto piu veloce, ma voglio sapere se posso migliorarlo ancora... qualche idea???:p
La stampa a video rallenta un casino, costringe il programma a state dietro allo standard output(la console per intenderci). Hai già provato con l'opzione -O2 in fase di compilazione? Oppure , devi togliere l'if dentro il while. Molto semplicemente puoi memorizzare le informazioni che vuoi un un array e stamparle alla fine. A meno che non le vuoi in tempo reale.Quell' if dentro il ciclo è davvero deleterio per le prestazioni.
La stampa a video rallenta un casino, costringe il programma a state dietro allo standard output(la console per intenderci). Hai già provato con l'opzione -O2 in fase di compilazione? Oppure , devi togliere l'if dentro il while. Molto semplicemente puoi memorizzare le informazioni che vuoi un un array e stamparle alla fine. A meno che non le vuoi in tempo reale.Quell' if dentro il ciclo è davvero deleterio per le prestazioni.
dunque così come lo posto ora va molto piu veloce!!!:D solo che vorrei un modo piu furbo per contare a che punto dell'operazione è il programma... qualche idea?? :mc:
#include <stdio.h>
int main (void){
char nomefile[20];
scanf("%s",nomefile);
printf("%s!\n",nomefile);
char *buf;
buf = new char [64000];
FILE *f, *f_out;
if ((f = fopen(nomefile, "rb")) && (f_out = fopen("cript.crp", "wb")))
{
size_t b;
long x=0;
while( b= fread( buf, 1, 64000, f) ) {
int y;
for(y=0;y<=64000;y++) buf[y]=buf[y]+1;
x++;
if((x%16)==0)
printf("%dMb\n",(x/16));
fwrite( buf, 1, b, f_out);
}
pclose(f);
fclose(f_out);
}
return 0;
}
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.