Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 16-01-2008, 17:46   #1
mamo139
Senior Member
 
L'Avatar di mamo139
 
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;   
}
mamo139 è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2008, 19:39   #2
Furla
Senior Member
 
Iscritto dal: Feb 2004
Messaggi: 1454
penso che il problema sia la stampa a video, non la condizione.
Furla è offline   Rispondi citando il messaggio o parte di esso
Old 16-01-2008, 20:15   #3
mamo139
Senior Member
 
L'Avatar di mamo139
 
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
Quote:
Originariamente inviato da Furla Guarda i messaggi
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???
mamo139 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2008, 08:58   #4
Unrue
Senior Member
 
L'Avatar di Unrue
 
Iscritto dal: Nov 2002
Messaggi: 6869
Quote:
Originariamente inviato da mamo139 Guarda i messaggi
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???
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.
Unrue è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2008, 10:39   #5
mamo139
Senior Member
 
L'Avatar di mamo139
 
Iscritto dal: Sep 2006
Città: Bologna/Milano
Messaggi: 525
Quote:
Originariamente inviato da Unrue Guarda i messaggi
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!!! solo che vorrei un modo piu furbo per contare a che punto dell'operazione è il programma... qualche idea??
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;   
}
mamo139 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:02.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v