Digamos que tenemos la siguiente cadena
string data= "/temp string";
Si queremos eliminar el primer personaje /, podemos hacerlo de muchas maneras, tales como:
data.Remove(0,1);
data.TrimStart('/');
data.Substring(1);
Pero, realmente no sé cuál tiene el mejor algoritmo y lo hago más rápido.
¿Hay uno que sea el mejor o todos sean iguales?

/?TrimStartno eliminará el primer carácter, eliminará losncaracteres desde el principio.SubstringEs el más rápido.TrimStart()está completamente fuera de discusión.Respuestas:
La segunda opción realmente no es la misma que las otras: si la cadena es "/// foo" se convertirá en "foo" en lugar de "// foo".
La primera opción necesita un poco más de trabajo para comprender que la tercera: vería la
Substringopción como la más común y legible.(Obviamente, cada uno de ellos como una declaración individual no hará nada útil; deberá asignar el resultado a una variable, posiblemente a
datasí mismo).No tomaría en cuenta el rendimiento aquí a menos que en realidad se convirtiera en un problema para usted, en cuyo caso la única forma en que lo sabría sería tener casos de prueba, y luego es fácil ejecutar esos casos de prueba para cada opción y compara los resultados. Esperaría
Substringser probablemente el más rápido aquí, simplemente porqueSubstringsiempre termina creando una cadena a partir de un solo fragmento de la entrada original, mientras queRemovetiene que al menos potencialmente unir un fragmento de inicio y un fragmento de final.fuente
Sé que esta es una tierra de hiperoptimización, pero me pareció una buena excusa
BenchmarkDotNet. El resultado de esta prueba (incluso en .NET Core) es queSubstringes ligeramente más rápido queRemove, en esta prueba de muestra: 19.37ns vs 22.52ns paraRemove. Entonces, ~ 16% más rápido.Resultados:
fuente
Supongo que
RemoveySubstringhabría empate en el primer lugar, ya que ambos sorber una porción de tamaño fijo de la cadena, mientras queTrimStarthace una exploración desde la izquierda con una prueba en cada personaje y luego tiene que realizar exactamente el mismo trabajo que el Otros dos métodos. En serio, sin embargo, esto es dividir los pelos.fuente
Substringes más rápido queRemove, porqueRemovellamaSubstring.SubstringyRemoveconfiar en un método privado,FillSubstring.string Remove(this string source, int from, int to) { return source.SubString(0, from) + source.SubString(to); }System.PInvoke.EE.AllocateStringpara asignar el objeto de cadena de destino y luego llamanFillSubstringpara copiar caracteres. ¿Estoy mirando lo incorrecto?Substring>Remove). No voy a comentar más porque la discusión tomó suficiente tiempo.Podrías perfilarlo, si realmente te importara. Escriba un bucle de muchas iteraciones y vea qué sucede. Sin embargo, es probable que este no sea el cuello de botella en su aplicación, y TrimStart parece el más semánticamente correcto. Esfuércese por escribir el código de manera legible antes de optimizar.
fuente
TrimStartes lo menos correcto, ya"//temp string".TrimStart('/')que no solo eliminará el primero'/'.