SirJo ha scritto:
se scarico tramite WebClient una certa stringa da internet tutte le operazioni seguenti relative a questa stringa sono rallentate tantissimo, facendo il debug riga per riga, anche un semplice Substring, IndexOf, ToUpper eccetera ci mette un sacco di tempo.
Occorre partire da uno dei capisaldi di .NET relativo alle stringhe che deve essere molto chiaro a qualsiasi sviluppatore:
le stringhe sono immutabili.
Questo significa che quando usi metodi tipo
Substring() o similari, o più in generale quando usi metodi che vanno a trasformare la stringa originale in qualcosa di diverso (es. estraggono un pezzo, convertono in maiuscolo, minuscolo, accodano testo, ecc.), quello che materialmente avviene è la creazione di nuovi oggetti che contengono la stringa modificata, e che si affiancano ai precedenti, ammesso che qualcuna di esse non possa essere deallocata dal Garbage Collector se non più utilizzata.
Se devi quindi lavorare con un testo all'interno di un ciclo, o fare operazioni ripetute che estrapolano modifiche da una stringa, è conveniente prediligere l'uso della classe
StringBuilder, che nasce appositamente con lo scopo di affiancare il programmatore nella creazione e anche manipolazione (un po' più limitata) di una stringa agendo internamente sul buffer di memoria che ne contiene i caratteri, producendo una unica istanza di tipo
String quando si invoca ad esempio il metodo
ToString().
Oltre a questo, nel tuo codice tu vai a salvare il testo su disco: il salvataggio deve tenere conto dell'encoding utilizzato e pertanto ciascun carattere della stringa deve essere trasformato nella sequenza di byte che lo rappresentano all'interno del file, e ciò avviene in modo diverso in base all'encoding scelto.
Questo significa che salvare una sequela di "X" è diverso da salvare un testo dove vi sono caratteri misti, alcuni dei quali - prendendo come esempio l'encoding UTF8 - richiedono solo un byte, altri magari due, altri ancora addirittura quattro, a seconda del contenuto della stringa.
E' pacifico che questo genere di operazione aumenta i tempi di salvataggio che saranno più o meno variabili in base alla probabilità che siano presenti caratteri di diverse famiglie piuttosto che si tratti in realtà di un solo carattere.
Come ricerca ulteriore, suggerirei di leggere questo articolo sulla
storia di Unicode e di approfondire i principi di funzionamento degli standard di trasformazione (UTF-x).
Ciao!