PDA

View Full Version : [C++]Diminuire l'utilizzo di RAM di una piccola app.


CrAsHeR
10-12-2008, 00:03
Salve ragazzi..
in questi giorni e dopo sbattimenti vari, ho scritto un piccolo programmino che:
in un ciclo continuo, pinga un host circa ogni 10secondi; Attraverso l'uso del file di log generato dal comando di ping, tramite confronto tra stringhe, si determina se l'host è ancora vivo o meno. Se l'host è vivo allora il ciclo ricomincia da capo (ovvero ripinga l'host e continua) Altrimenti se l'host è morto esce dal ciclo e termina il programma.
Mi sono reso conto che ogni volta che comincia il ciclo, il processo occupa 4kb di memoria in più..Come potrei ovviare a questo problema, considerando che il processo dovrà avviarsi col pc, e spegnersi con esso (e quindi deve stare per tutto ilt empo in esecuzione)?
Vorrei evitare problemi di memory leaking :)


#include <iostream>
#include <windows.h>
#include <string.h>
#include <fstream>


using namespace std;

int main(){
fstream file1; //Dichiarazione file1 come variabile di tipo fstream
int null=true; //Dichiarazione variabile inesistente!
int k=0; //Dichiarazione variabili di appoggio
char tmp; //Dichiarazione char di appoggio
char stringa[18]; //Dichiarazione array stringa
while (null){ //Ciclo per ripetere il loop
system("ping -n 2 -w 400 192.168.1.1 > c:\\ping.log"); //Comando principale: Pingo l'ip di rete
file1.open("c:\\ping", ios::in); //Apertura del file di log in lettura
if (file1){ //Verifico l'esistenza del file
while (( tmp=file1.get())!=EOF){ //Fintanto che leggi il file e non arrivi alla fine..
if (tmp==10){ //Appena una riga finisce..
k++; //Incrementa kappa
if (k==3){ //Se kappa=3 ovvero hai scorso 4 righe..Allora
for (int j=0; j<18; j++){ //For di controllo per evitare allocazioni in punti dove l'array non esiste
if(( tmp=file1.get())!=13){ //Metti in tmp tutti i char fino a quello di fine riga
stringa[j]=tmp; //Copia Ogni char tmp, nell'array stringa e incrementa il posto dell'array
}
}
}
}
}
}
file1.close(); //Abbiamo finito allora chiudo il file!


if (strcmp(stringa,"Richiesta scaduta.")==0){ //Se nella 4a riga, rileva una richiesta scaduta esegue..
cout << "trovato" << endl;
null=false;
}
else { cout << "non trovato" << endl;}


Sleep(5000); //Aspetta 5 secondi prima di ricominciare il ciclo
}
system("PAUSE");
return EXIT_SUCCESS;

}


Vorrei sapere se avete qualche consiglio di ogni tipo da darmi (in particolare per affinare la lettura da file) o se magari anzichè leggere da file sarebbe meglio implementare qualche f(x) di ping già bella e pronta e sfruttare una condizione "certa" di ping fallito.
Grazie! ;)