|
|
|
![]() |
|
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: 5840
|
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 09: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: 04:40.