Esiste una differenza di prestazioni tra String.Replace (char, char) e String.Replace (string, string) quando ho solo bisogno di sostituire un carattere con un altro?String.Replace (char, char) o Replace (stringa, stringa)?
risposta
Sì, c'è: ho eseguito un rapido esperimento e sembra che la versione della stringa sia circa 3 volte più lenta.
string a = "quickbrownfoxjumpsoverthelazydog";
DateTime t1 = DateTime.Now;
for (int i = 0; i != 10000000; i++) {
var b = a.Replace('o', 'b');
if (b.Length == 0) {
break;
}
}
DateTime t2 = DateTime.Now;
for (int i = 0; i != 10000000; i++) {
var b = a.Replace("o", "b");
if (b.Length == 0) {
break;
}
}
DateTime te = DateTime.Now;
Console.WriteLine("{0} {1}", t2-t1, te-t2);
1.466s vs 4.583s
questo non è sorprendente, perché il sovraccarico con le stringhe ha bisogno di un ciclo in più per passare attraverso tutti i caratteri del oldString
. Questo ciclo si esegue esattamente una volta, ma il sovraccarico è ancora lì.
Vorrei string.Replace(char, char)
potenzialmente più veloce, in quanto può allocare esattamente la giusta quantità di spazio. Dubito che farà comunque una significativa differenza di prestazioni in molte app del mondo reale.
Ancora più importante, direi che è più leggibile: è più chiaro che ci si ritroverà con una stringa della stessa lunghezza.
String.Replace(char, char)
è più veloce. La ragione è semplice:
- sostituzione Char non ha bisogno di allocare una stringa con una dimensione diversa, la sostituzione String ha bisogno di scoprire la nuova dimensione prima o utilizzare un
StringBuilder
per la sostituzione - sostituzione Char non lo fa bisogno di fare un controllo con un intervallo di una stringa. Immagina di avere una stringa come
ABCACABCAC
e di sostituireABC
. Devi scoprire se 3 caratteri corrispondono, quando lavori con i caratteri devi solo trovare un carattere.
- 1. Metodo String.Replace (char, char) in C#
- 2. Iterate tramite stringa char per char
- 3. Cosa ha più senso: char * string o char * stringa?
- 4. Converti stringa in char
- 5. Differenza tra char a [] = "stringa"; char * p = "stringa";
- 6. String Unicode rimuove char dalla stringa
- 7. Rimuovi '\' char da stringa C#
- 8. converte char unsigned * in stringa
- 9. Stringa al char array Java
- 10. differenze tra char * e stringa
- 11. Java null char nella stringa
- 12. Convertire Char in una stringa
- 13. Terminazione stringa - char c = 0 vs char c = '\ 0'
- 14. Concatena stringa letterale con char letterale
- 15. Char Array VS Char *
- 16. come tagliare il vettore char array o stringa?
- 17. MARCHQL VARCHAR o CHAR per stringa di lunghezza fissa
- 18. Conversione char [,] array a char **
- 19. Copia contenuto stringa in char array
- 20. .NET/C# - Converti char [] in stringa
- 21. Come convertire char [] a stringa in java?
- 22. Conversione da stringa a char - C++
- 23. Conversione di un seg [char] per stringa
- 24. Converti stringa esadecimale (char []) in int?
- 25. PowerShell converte Char Array in stringa
- 26. Rappresentando un Char con la stringa equivalente
- 27. Restituisce char []/stringa da una funzione
- 28. Creazione stringa non sicura da char []
- 29. Come sfuggire char in Python 3 '' 'stringa?
- 30. Forza `const char []` letterali stringa in clang
grazie per il vostro programma di test! – Laguna
+1 Fuori interesse, c'è qualcuno in grado di decodificare i sovraccarichi di System.String.ReplaceInternal? Sono interessato a vedere se il Dev ha osservato l'immutabilità sul sovraccarico di carbone :) – StuartLC