hace algo sabe por qué la salida de este código:Regex.Match, startat y^(inicio de la cadena)
Regex re = new Regex("^bar", RegexOptions.Compiled);
string fooBarString = @"foo bar";
Match match1 = re.Match(fooBarString, 4);
Console.WriteLine(String.Format("Match 1 sucess: {0}", match1.Success));
Match match2 = re.Match(fooBarString.Substring(4));
Console.WriteLine(String.Format("Match 2 sucess: {0}", match2.Success));
es:
Partido 1 éxito: Falso
Partido 2 éxito: verdadero
?
El comportamiento esperado es, por supuesto, "Verdadero" y "Verdadero" (o bien, realmente no sé para qué se supone que es útil el parámetro "startat").
La idea es que esta coincidencia de expresiones regulares (y hay muchas de ellas) se llama con mucha frecuencia (varios tous y por segundo) y descubrimos que las operaciones de subcadena están matando el rendimiento de la memoria.
Gracias por su ayuda!
Rendimiento: Si 'Substring' crea un nuevo objeto' String' con una nueva copia del 'Char's subyacente (y estoy bastante seguro de que lo hace), lo harías * además de * la expresión regular que empareja. Y el OP de hecho dijo que el problema era con el uso de la memoria, no con la velocidad, lo que hace que 'Substring' sea el principal sospechoso. Afortunadamente, como muestra @ Maxime [respuesta] (http://stackoverflow.com/questions/5884922/regex-match-startat-and-start-of-string/5885087#5885087), no es necesario de todos modos. –
@Alan - Sí, cometí el error de pensar en el rendimiento en términos de velocidad en lugar de memoria (sin decir que 'Subcadena' no sería un golpe de velocidad, por cierto, solo que era mucho menos que la propia expresión regular) . @Maxime entendió mejor lo que el cartel estaba tratando de hacer, por lo que obtiene mi +1. Re el método 'Substring' - Eso [construye una nueva cadena] (http://msdn.microsoft.com/en-us/library/aka44szs.aspx), ya que las cadenas son inmutables en C#. –
@JustinMorgan En realidad, la inmutabilidad es lo que permitiría no tener que crear una nueva cadena, es posible que la cadena simplemente apunte a la subcadena. La razón por la que esto no tiene que ver tiene que ver con la recolección de basura. – mirhagk