Saltar al contenido

¿Hay alguna manera de aumentar el tamaño de la pila en C#?

Luego de de nuestra prolongada recopilación de datos pudimos resolver esta incógnita que presentan ciertos de nuestros lectores. Te compartimos la solución y nuestro deseo es servirte de gran apoyo.

Solución:

La gran mala advertencia

Si usa la recursividad en un programa y llega a un punto en el que tener una StackOverflowException es una amenaza real, no considere aumentar el tamaño de la pila como una solución válida.

Si encuentra una StackOverflowException, está haciendo algo muy mal; en su lugar, deberías estar usando un Stack para procesamiento primero en profundidad, o un Queue para el procesamiento de ancho primero. Ejemplo.


La solución

Esto se puede lograr usando editbin.exeque se instala con este paquete;
Herramientas de VC++

Encuentra la ubicación de editbin.exeel mío estaba ubicado en C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.14.26428binHostx64x64editbin.exesugeriría usar Everything de voidtools en lugar de la horrible búsqueda de Microsoft para encontrar esto.

Establecer el tamaño de la pila manualmente

Navegue a su carpeta bin y ejecute lo siguiente:

"" /stack: 

Por ejemplo, ejecuté esto:

"C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.14.26428binHostx64x64EDITBIN.EXE" /stack:2097152 ExampleProgram.exe

Lo que establece el tamaño de reserva de la pila en 2 MB.

Con esto fui capaz de llegar al doble del nivel de recursión; (Reserva de pila de 1 MB a la izquierda, reserva de pila de 2 MB a la derecha).

Nivel de recursividad

Establecer el tamaño de la pila automáticamente

Haga clic derecho en su proyecto y seleccione ‘Opciones’, luego haga clic en ‘Crear eventos’ y agregue lo siguiente a sus eventos posteriores a la construcción:

"" /stack: "$(TargetPath)"

Por ejemplo, agregué

"C:Program Files (x86)Microsoft Visual Studio2017CommunityVCToolsMSVC14.14.26428binHostx64x64EDITBIN.EXE" /stack:2097152 "$(TargetPath)"

esto se ejecutará editbin.exe cada vez que construyas tu ejecutable.

Nota: Verá un nivel mucho más bajo de recursividad alcanzado cuando ejecute su programa desde Visual Studio que cuando lo ejecute explícitamente a través de explorer o cmd. Sin embargo, aún verá un aumento de 2 veces en el nivel de recursividad alcanzado si pasa de una reserva de pila de 1 MB a una reserva de pila de 2 MB.

Recuerda algo, que tienes la capacidad de agregar una reseña si hallaste tu rompecabezas en el momento verdadero.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *