2013-07-15 2 views
3

У меня есть веб-приложение ASP.NET, разработанное на C# и .Net v4. Когда вы входите в систему и уходите на страницу в течение примерно 15-20 минут, я получаю «Недостаточный стек, чтобы продолжить выполнение программы безопасно.«System.Web.UI.Control.LoadRecursive() - Недостаточно стека, чтобы продолжить выполнение программы безопасно.

По моим сведениям, вы не можете попытаться поймать stackoverflow в .Net. Я бы предположил, что рекурсивная загрузка веб-страницы и проверка активного сеанса, приводящая к этой ошибке (возможно, неправильная практика кодирования). Я также добавил скриншот, так как я могу понять его из Stack trace. Если кто-нибудь поможет мне в этом, это будет полезно.

Screen Shot

+0

Какой контроль вы пытаетесь найти? Я бы предположил, что у вас есть цикл 'while',' for' или 'foreach', который не заканчивается и работает до тех пор, пока это не встретится. –

+0

Это не перехват стека. Он использует ['RuntimeHelpers.EnsureSufficentExecutionStack'] (http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.runtimehelpers.ensuresufficientexecutionstack.aspx), который генерирует' InsufficientExecutionStackException', * not * a 'StackOverflowException'. Это исключение можно поймать. Это тестирование для обеспечения достаточного количества стека для выполнения операции без фактического завершения работы стека. Тем не менее, перехват этого исключения, вероятно, не будет полезен, потому что, вероятно, не имеет смысла его обрабатывать. – vcsjones

+0

Что, вероятно, происходит, так это то, что метод LoadRecursive, framework, использует это для обеспечения правильного пространства стека. Он не работает * возможно *, потому что у вас очень, очень вложенные элементы управления ASP.NET. – vcsjones

ответ

1

Я думаю, что нашел решение. Еще тест. Проверьте this Ссылка и this они действительно выглядят многообещающими. Я буду держать вас, ребята, обновленные, когда мне удастся.

Спасибо всем, что обратились за помощью.

0

Проблема заключается в CallStack прав в конце стека.

Несколько вещей, чтобы искать:

  1. Есть ли где-нибудь в вашем коде, где вы используете .FindControl(string id)?
  2. Если да, то это локализация элемента управления, а затем попытка найти его дальше?
  3. Вы динамически создаете элементы управления, например, для <asp:Placeholder/> элементов управления.

Он может быть рекурсивным, если вы ссылаетесь на родителя из внутри вложенного элемента управления, который затем получает ссылку на родителя.