¿Existe una diferencia de rendimiento entre String.Replace (char, char) y String.Replace (string, string) cuando solo necesito reemplazar una vez el carácter con otra?String.Replace (char, char) o Replace (string, string)?
Respuesta
Sí, hay: realicé un experimento rápido, y parece que la versión de cadena es aproximadamente 3 veces más 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
Esto no es sorprendente, ya que la sobrecarga con cuerdas necesita un bucle extra para ir a través de todos los caracteres del oldString
. Este ciclo se ejecuta exactamente una vez, pero la sobrecarga todavía está allí.
Deseo esperarstring.Replace(char, char)
para ser potencialmente más rápido, ya que puede asignar exactamente la cantidad correcta de espacio. Sin embargo, dudo que haga una diferencia de rendimiento significativa en muchas aplicaciones del mundo real.
Más importante aún, diría que es más legible, es más claro que terminará con una cadena de la misma longitud.
String.Replace(char, char)
es más rápido. La razón es simple:
- reemplazo Char no necesita asignar una cadena con un tamaño diferente, la sustitución de cuerdas necesita averiguar el nuevo tamaño primero o utilice un
StringBuilder
para la sustitución - reemplazo Char no lo hace necesito hacer un chequeo con un rango de una cuerda. Imagine que tiene una cadena como
ABCACABCAC
y desea reemplazarABC
. Necesitas saber si 3 caracteres coinciden, cuando trabajas con caracteres solo necesitas encontrar un carácter.
- 1. ¿Qué tiene más sentido: char * string o char * string?
- 2. Diferencia entre char * str = "STRING" y char str [] = "STRING"?
- 3. std :: string vs. char *
- 4. Método String.Replace (char, char) en C#
- 5. String to Char array Java
- 6. Necesita convertir String^en char *
- 7. ¿Hay una necesidad de destruir char * = "string" o char * = new char [6]?
- 8. C char a string (pasando char a strcat())
- 9. inicializar std :: string de char * sin copia
- 10. Conversión de System :: String a Const Char *
- 11. Java Optimization String vs Char Arrays
- 12. Cómo convertir Platform :: String a char *?
- 13. Cómo convertir std :: string a const char *?
- 14. const unsigned char * to std :: string
- 15. const char * a const std :: string &
- 16. Cómo convertir char * a un sistema :: string^
- 17. C++ std :: string y NULL const char *
- 18. Cómo agregar un char a std :: string?
- 19. stringstream, string y char * confusión de conversión
- 20. ¿Cuál usar const char [] o const std :: string?
- 21. String Find/Replace Algorithm
- 22. C# replace string dentro del archivo
- 23. Emacs Case Sensitive Replace String
- 24. Java String replace no funciona
- 25. Obteniendo una matriz char del usuario sin usar un String
- 26. create std :: string from char * de forma segura
- 27. C++ copy std :: string a char array sin terminación nula
- 28. Convierta un 'System :: String ^' en 'const char *' en vC++
- 29. ¿Cómo convierto un System :: String^a const char *?
- 30. Const const char * string a NSString con longitud Y codificación
gracias por su programa de prueba! – Laguna
+1 Fuera de interés, ¿alguien puede aplicar ingeniería inversa a las sobrecargas de System.String.ReplaceInternal? Estoy interesado en ver si el Dev observó la inmutabilidad en la sobrecarga de char :) – StuartLC