У меня есть веб-приложение ASP.NET, разработанное на C# и .Net v4. Когда вы входите в систему и уходите на страницу в течение примерно 15-20 минут, я получаю «Недостаточный стек, чтобы продолжить выполнение программы безопасно.«System.Web.UI.Control.LoadRecursive() - Недостаточно стека, чтобы продолжить выполнение программы безопасно.
По моим сведениям, вы не можете попытаться поймать stackoverflow в .Net. Я бы предположил, что рекурсивная загрузка веб-страницы и проверка активного сеанса, приводящая к этой ошибке (возможно, неправильная практика кодирования). Я также добавил скриншот, так как я могу понять его из Stack trace. Если кто-нибудь поможет мне в этом, это будет полезно.
Какой контроль вы пытаетесь найти? Я бы предположил, что у вас есть цикл 'while',' for' или 'foreach', который не заканчивается и работает до тех пор, пока это не встретится. –
Это не перехват стека. Он использует ['RuntimeHelpers.EnsureSufficentExecutionStack'] (http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.runtimehelpers.ensuresufficientexecutionstack.aspx), который генерирует' InsufficientExecutionStackException', * not * a 'StackOverflowException'. Это исключение можно поймать. Это тестирование для обеспечения достаточного количества стека для выполнения операции без фактического завершения работы стека. Тем не менее, перехват этого исключения, вероятно, не будет полезен, потому что, вероятно, не имеет смысла его обрабатывать. – vcsjones
Что, вероятно, происходит, так это то, что метод LoadRecursive, framework, использует это для обеспечения правильного пространства стека. Он не работает * возможно *, потому что у вас очень, очень вложенные элементы управления ASP.NET. – vcsjones