StackOverflowException en ASP.net

Apunto este snippet, como recordatorio.

image

Como indica el comentario del código, me ha ocurrido que necesitaba ejecutar una función recursiva, que recorriese un árbol en busca de un nodo.

Como mi árbol había sido construido por el usuario, y no existían validaciones que lo impidiesen, estaba realizando una búsqueda recursiva, en la que uno de los nodos hijo era a su vez padre en la misma rama.

 

image

 

Y como indica la MSDN

Starting with the .NET Framework version 2.0, a StackOverflowException object cannot be caught by a try-catch block and the corresponding process is terminated by default. Consequently, users are advised to write their code to detect and prevent a stack overflow.

el el StackOverflowException no se puede capturar en un bloque try…catch, y como consecuencia, el proceso finaliza sin más, sin hacer preguntas.

Esto, en una aplicación de escritorio, aunque es problemático, no tiene mayor repercusión, y el fallo es evidente; La aplicación se cierra sin hacer preguntas. Pero en una aplicación Asp.net, el proceso del IIS se reinicia, y hasta que te das cuenta del fallo… puede pasar mucho tiempo.

 

http://msdn.microsoft.com/en-us/library/system.stackoverflowexception.aspx

Published 10/3/2011 8:57 por Cristhian Fernández
Archivado en: ,
Comparte este post:
http://geeks.ms/blogs/crisfervil/archive/2011/03/10/stackoverflowexception-en-asp-net.aspx

Comentarios

# re: StackOverflowException en ASP.net

Una buena practica es eliminar la recursividad siempre, y como está demostrado formalmente por la teoria de la computación que siempre es posible, no hay excusa.

Otra cosa es que el algoritmo "desrecursivizado" te dé un time out :)

Friday, March 11, 2011 10:55 AM por Carlos Perez

# re: StackOverflowException en ASP.net

Y porqué es buena práctica eliminar la recursividad?

Lo pregunto más que nada porque cierto tipo de algoritmos, como cuando hay que recorrer un árbol, es bastante sencillo programarlos mediante recursividad. Vamos, yo lo utilizo bastante a menudo.

Friday, March 11, 2011 1:26 PM por Cristhian Fernández

# re: StackOverflowException en ASP.net

Sólo por curiosidad: ¿Sabes si esto es un "bug" disfrazado de "feature", o por el contrario se ha introducido intencionadamente en el framework?

Thursday, March 24, 2011 12:05 PM por Alejandro López

# re: StackOverflowException en ASP.net

Yo no creo que sea un bug, teniendo en cuenta que en el Framework 1.1 la posibilidad de capturar la StackOverflowException si existía. Si lo han quitado, será por algo.

Thursday, March 24, 2011 2:26 PM por Cristhian Fernández