Vale la pena usare StringBuilder nelle app Web?
-
19-08-2019 - |
Domanda
Nell'app Web sto dividendo le stringhe e le sto assegnando ai nomi dei collegamenti o alle raccolte di stringhe. C'è un notevole vantaggio in termini di prestazioni nell'uso di stringbuilder per un'applicazione web?
EDIT: 2 funzioni: suddividere un collegamento in 5-10 stringhe. Quindi riconfezionando in un'altra stringa. Inoltre aggiungo una stringa alla volta a un collegamento ogni volta che si fa clic sul collegamento.
Soluzione
Quante stringhe concatenerai? Sai per certo quanti ce ne saranno o dipende da quanti record ci sono nel database ecc.
Vedi il mio articolo su questo argomento per maggiori dettagli e linee guida - ma sostanzialmente , trovarsi in un'app Web non fa alcuna differenza rispetto alla costosa concatenazione di stringhe rispetto all'utilizzo di StringBuilder.
EDIT: temo che non sia ancora del tutto chiaro dalla domanda esattamente cosa stai facendo. Se hai un set fisso di stringhe da concatenare e puoi farlo tutto in una volta, allora è più veloce e probabilmente più leggibile farlo usando la concatenazione. Ad esempio:
string faster = first + " " + second + " " + third + "; " + fourth;
string slower = new StringBuilder().Append(first)
.Append(" ")
.Append(second)
.Append(" ")
.Append(third)
.Append("; ")
.Append(fourth)
.ToString();
Un'altra alternativa è ovviamente quella di utilizzare una stringa di formato. Questo potrebbe essere il più lento, ma il più leggibile:
string readable = string.Format("{0} {1} {2}; {3}",
first, second, third, fourth);
La parte della tua domanda che menziona " l'aggiunta di un link ogni volta " suggerisce di usare StringBuilder per quell'aspetto - tutto ciò che porta naturalmente a un ciclo è più efficiente (per numeri da moderati a grandi) usando StringBuilder.
Altri suggerimenti
Dovresti dare un'occhiata a questo eccellente articolo di Jon Skeet su concatenare stringhe.
Sì, concatenare stringhe regolari è costoso (aggiungendo davvero una stringa alla fine di un'altra). Ogni volta che una stringa viene cambiata, .net rilascia la vecchia stringa e ne crea una nuova con i nuovi valori. È un oggetto immutabile.
EDIT:
Stringbuilder dovrebbe essere usato con cautela e valutato come qualsiasi altro approccio. A volte connettere due stringhe insieme sarà più efficiente e dovrebbe essere valutato caso per caso.
Perché le prestazioni dovrebbero differire in un'applicazione web o un'applicazione winforms?
L'uso di stringbuilder è una buona pratica a causa dell'allocazione di memoria e oggetti, le regole si applicano indipendentemente dal motivo per cui si sta creando il codice.
Se stai creando la stringa in un ciclo con un alto numero di iterazioni, allora è una buona idea usare stringbuilder. Altrimenti, la concatenazione di stringhe è la soluzione migliore.
PRIMA, stai ancora scrivendo questa applicazione? Se sì, ARRESTA il tuning delle prestazioni! In secondo luogo, dare la priorità alla correttezza rispetto alla velocità. La leggibilità è molto più importante a lungo termine per ovvie ragioni. TERZO, NON conosciamo la situazione esatta e il codice che stai scrivendo. Non possiamo davvero avvisarti se questa micro ottimizzazione è importante per le prestazioni del tuo codice o meno. MISURA la differenza. Consiglio vivamente il profilo Ants di Red Gate.