Invece di utilizzare StringBuilder
, provare a utilizzare TextWriter
(che ha un'API sostanzialmente simile, ma che può scrivere un numero di destinazioni sottostanti, inclusi i file) - cioè
using(TextWriter writer = File.CreateText(path))
{
// loop etc
writer.Write(...);
}
Più in generale, è opportuno separare il codice che conosce i file dal codice che sa su come scrivere i dati, vale a dire
using(var writer = File.CreateText(path))
{
Serialize(writer);
}
...
void Serialize(TextWriter writer)
{
...
}
questo rende più facile scrivere a obiettivi diversi. Ad esempio, ora è possibile farlo in memoria troppo:
var sw = new StringWriter();
Serialize(sw);
string text = sw.ToString();
Il punto è: il codice Serialize
non aveva bisogno di cambiare per accogliere un target diverso. Questo potrebbe anche scrivere direttamente su una rete, o scrivere attraverso un flusso di compressione/crittografia. Molto versatile.
fonte
2011-11-04 10:51:31
Potrebbe non solo fare File.WriteAllText con il testo che si sta aggiungendo piuttosto che mettere in uno StringBuilder e fare tutto in una volta? –
@Bali per chiamare 'WriteAllText' è necessario avere tutto il testo, in modo che non aiuti con problemi di memoria –
@MarcGravell Ah si, errore mio, grazie Marc –