Tengo una cadena de la que tengo que eliminar el siguiente carácter: '\ r', '\ n' y '\ t'. He intentado tres formas diferentes de eliminar estos caracteres y los he comparado para que pueda obtener la solución más rápida.La forma más rápida de eliminar caracteres de la cadena
Los siguientes son los métodos y hay tiempo de ejecución cuando los encontré 1000000 veces:
Cabe solución más rápida si tengo 1 o 2 char a eliminar. Pero como ya he puesto en más carbón, comienza a tomar más tiempo
str = str.Replace("\r", string.Empty).Replace("\n", string.Empty).Replace("\t", string.Empty);
Tiempo de ejecución = 1695
para 1 o 2 char, esto era más lento que String.Replace, pero para 3 charla mostró un mejor rendimiento.
string[] split = str.Split(new char[] { '\t', '\r', '\n' }, StringSplitOptions.None);
str = split.Aggregate<string>((str1, str2) => str1 + str2);
Tiempo de ejecución = 1030
el más lento de todos, incluso con 1 Char. Tal vez mi expresión regular no es la mejor.
str = Regex.Replace(str, "[\r\n\t]", string.Empty, RegexOptions.Compiled);
Tiempo de ejecución = 3500
Estas son las tres soluciones que se me ocurrió. ¿Hay alguna solución mejor y más rápida que alguien aquí conozca, o cualquier mejora que pueda hacer en este código?
cadena que he utilizado para la evaluación comparativa:
StringBuilder builder = new StringBuilder();
builder.AppendFormat("{0}\r\n{1}\t\t\t\r\n{2}\t\r\n{3}\r\n{4}\t\t\r\n{5}\r\n{6}\r\n{7}\r\n{8}\r\n{9}",
"SELECT ",
"[Extent1].[CustomerID] AS [CustomerID], ",
"[Extent1].[NameStyle] AS [NameStyle], ",
"[Extent1].[Title] AS [Title], ",
"[Extent1].[FirstName] AS [FirstName], ",
"[Extent1].[MiddleName] AS [MiddleName], ",
"[Extent1].[LastName] AS [LastName], ",
"[Extent1].[Suffix] AS [Suffix], ",
"[Extent1].[CompanyName] AS [CompanyName], ",
"[Extent1].[SalesPerson] AS [SalesPerson], ");
string str = builder.ToString();
Sí lo es. Tiempo de ejecución = 195 – ata
Por cierto, necesita una máquina nueva: P – ata
Es un Xeon reciente: probablemente nuestros puntos de referencia estén configurados de manera diferente. –