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.

È stato utile?

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.

Atwood ha un articolo interessante in merito.

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top