|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
[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 Codice:
#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;
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2004
Messaggi: 1454
|
penso che il problema sia la stampa a video, non la condizione.
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
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??? |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6399
|
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.
Ultima modifica di Unrue : 17-01-2008 alle 10:22. |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
|
Quote:
dunque così come lo posto ora va molto piu veloce!!! Codice:
#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;
}
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:31.




















