He estado haciendo un poco de trabajo con expresiones regulares durante la última semana y logré hacer un gran progreso, sin embargo, sigo siendo bastante n00b. He una expresión regular escrito en C#:Expresiones regulares en C# ejecutando lentamente
string isMethodRegex =
@"\b(public|private|internal|protected)?\s*(static|virtual|abstract)?"+
@"\s*(?<returnType>[a-zA-Z\<\>_1-9]*)\s(?<method>[a-zA-Z\<\>_1-9]+)\s*\"+
@"((?<parameters>(([a-zA-Z\[\]\<\>_1-9]*\s*[a-zA-Z_1-9]*\s*)[,]?\s*)+)\)";
IsMethodRegex = new Regex(isMethodRegex);
Por alguna razón, cuando se llama al IsMethodRegex.IsMatch expresión regular() se cuelga durante más de 30 segundos en la siguiente cadena:
"\t * Returns collection of active STOP transactions (transaction type 30) "
¿Hay alguien cómo las partes internas de Regex funcionan y por qué esto sería tan lento al hacer coincidir esta cadena y no otras. He jugado con eso y descubrí que si saco el * y el paréntesis, funciona bien. ¿Quizás la expresión regular está mal escrita?
Cualquier ayuda sería tan apreciada.
¿Ha intentado compilar la expresión regular? Una de las sobrecargas del constructor proporciona esta capacidad. –
@Steve: Acabo de probarme y, después de compilarlo, todavía lleva mucho tiempo. Puedo reproducir el largo tiempo en mi propia máquina en LinqPad. – mellamokb
Sé que esto no viene al caso, pero su expresión regular se ve muy frágil para mí. De alguna manera, creo que el rendimiento es el menor de tus problemas. – ChaosPandion