2010-04-27 36 views
19

Tengo una aplicación C# en el que estoy recibiendo este error:evaluación Función desactivada debido a que una evaluación de la función anterior Tiempo de espera agotado

"Evaluación Función desactivada debido a que una evaluación de la función anterior Tiempo de espera agotado Debe continuar la ejecución de la función vuelva a habilitar. evaluación."

Vi muchas publicaciones relacionadas con este error en stackoverflow y en msdn también, pero no encontré ninguna solución. La mayoría de la gente dice que este error viene en una aplicación multiproceso y puede resolverse eliminando todos los puntos de interrupción. En mi caso, mi aplicación es de un único subproceso y también he eliminado todos los puntos de interrupción, pero aún obtengo este error cuando depuro la aplicación. Cuando ejecuto la aplicación. sin depuración, mi aplicación simplemente se cuelga y tengo que detenerla en Visual Studio. Traté de encontrar el código donde se cuelga y encontré la línea donde se cuelga. Este es el fragmento de código:

MatchCollection matchesFound = Regex.Matches(content, 
              keywordPattern, 
              RegexOptions.Multiline); 
int matchCount = matchesFound.Count; 

Cuando la ejecución llega en segunda línea, es decir, cuando el código intenta obtener el valor de la propiedad Count mi aplicación se cuelgue. Mi expresión regular está bien ya que la he probado en Expresso y estoy seguro de que esa aplicación no se ahorcará mientras se ejecuta el método Matches(). Si llego a esa línea mediante la depuración, aparece el error mencionado anteriormente. ¿Alguien sabe por qué viene este error y cómo resolverlo?

Estoy utilizando Visual Studio 2005.

+1

¿Cuál es la expresión regular? –

+0

Mi expresión regular es dinámica en función de las palabras clave mencionadas en un archivo. Leí esas palabras clave del archivo y formé expresiones regulares. He probado esa expresión regular en Expresso y funcionó bien sin ser colgado en expresso. Además, durante la depuración he encontrado que mi aplicación. no se bloquea en el método Matches(). – Shekhar

+1

Creo que debería publicar una muestra regular y la cadena de prueba, o incluso mejor: una versión minimizada de compilación y ejecución n de todo el código. – Amarghosh

Respuesta

8

Las razones de la caída y de este mensaje de error son probablemente la misma: hay algo que necesita mucho tiempo para calcular. Tanto cuando lo haces en código como en depurador. El depurador no tiene poder mágico para calcular algo más rápido que tu aplicación.

Puede tratar de usar Debug.WriteLine para dar salida a content y keywordPattern. Creo que fácilmente podría ser que ambos son lo suficientemente grandes como para tardar años en continuar.

+0

hmm .. ok ... La razón detrás de que dije que mi expresión regular está bien es que el método Regex.Matches() se ejecuta sin tomar demasiado tiempo. mi aplicación solo se bloquea cuando trato de obtener la propiedad de conteo del objeto MatchCollection. De todos modos, volveré a revisar mi expresión regular una vez más y también pondré muestra de expresiones regulares aquí. ¡Gracias por la ayuda! – Shekhar

+5

'Regeex.Matches()' no hace casi nada. El contenido 'MatchCollection' es ** perezoso ** calculado. Es la primera llamada a algo como 'Count' que hace que encuentre todas las coincidencias. Entonces no hay sorpresas aquí. Sigo pensando que 'content' es grande y' keywordPattern' es complicado. Es posible que deba reconsiderar su lógica. Tal vez haya una manera de calcular lo que necesita de una manera mucho más rápida. En realidad, "¿Cómo calcular algo eficientemente? Podría ser una mejor pregunta para preguntar aquí que" ¿Por qué mi programa funciona tan lentamente? ". – SergGr

Cuestiones relacionadas