Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Lettura/scrittura da/su file di testo .txt
sabato 09 giugno 2007 - 19.06
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
cavalieredeltempo
Profilo
| Newbie
3
messaggi | Data Invio:
sab 9 giu 2007 - 19:06
Salve a tutti, programmo da poco in C# ed ho un problema.
Devo prima leggere un intero documento di testo arbitrariamente grande e poi scriverne un altro.
In Java esistono stream per lo scambio efficiente di dati, in particolare BufferedReader e BufferedWriter che mettono a disposizione i metodi readLine e writeLine sfruttando implicitamente un buffer.
In C#, a quanto ho capito, esiste solamente la classe BufferedStream, che mette a disposizione il metodo Read(byte[] buffer, int offset, int length). Dato che lavoro su stringhe mi servirebbe invece un metodo ReadLine, che eviti però di accedere al disco ad ogni linea.
Mi sono chiesto se il metodo ReadLine della classe StreamReader non implementasse gia una lettura efficiente tramite buffer. Ma non ho trovato risposta da nessuna parte. Per caso qualcuno mi può illuminare sulla strada da seguire?
Grazie
munissor
Profilo
| Senior Member
270
messaggi | Data Invio:
lun 11 giu 2007 - 19:08
Per leggere usa:
FileStream fs = File.OpenText("file.txt");
BufferedStream bf = new BufferedStream(fs);
StreamReader sr = new StreamReader(bf);
Per scrivere è analogo solo che devi aprire il file di testo in scrittura...
Ciao
cavalieredeltempo
Profilo
| Newbie
3
messaggi | Data Invio:
lun 11 giu 2007 - 19:23
Caspita!
Non ci pensavo che gli stream si potevano concatenare in questo modo!
Peccato che ho gia sviluppato l'algoritmo utilizzando solo BufferedStream. Spero di trovare il tempo di applicare il tuo consiglio.
Grazie mille!
cavalieredeltempo
Profilo
| Newbie
3
messaggi | Data Invio:
mer 13 giu 2007 - 11:34
FileStream fs = File.OpenText("file.txt");
BufferedStream bf = new BufferedStream(fs);
StreamReader sr = new StreamReader(bf);
In questo modo da errore, ma ci sono mille modi per correggerlo.
A tal proposito mi è venuto in mente un modo per utilizzare solo due stream:
FileStream fs = new FileStream("file.txt", FileMode.Open, FileAccess.Read, FileShare.None, bufferSize);
StreamReader sr = new StreamReader(fs );
O forse la presenza di quel bufferSize mi ha fatto prendere un granchio?
In effetti osservando il programma in esecuzione sul task manager, le prestazioni per quanto riguarda il consumo di memoria sono estremamente frustranti.
Per quanto mi ingegni ad usare buffer, a incapsulare gli stream in clausole using, a ridurre al minimo le strutture di appoggio .net continua a fare ciò che vuole della memoria. In pratica, nonostante abbia imposto l'uso di un massimo di 10 MB di memoria (tra buffers e strutture d'appoggio) la memoria oscilla imprevedibilmente tra i 20 e i 60 MB.
munissor
Profilo
| Senior Member
270
messaggi | Data Invio:
mer 13 giu 2007 - 18:14
Devi considerare però anche l'utilizzo di RAM da parte del runtime.. Se devi ottimizzare la memoria in modo "pesante" devi utilizzare WinDbg e le estensioni SOS per vedere esattamente cosa è caricato dal tuo codice gestito e cosa invece è parte del runtime... In ogni caso se hai requisiti di memoria molto restrittivi conviene sempre il caro vecchio C++
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !