2013-07-15 33 views
3

我有一个用C#和.Net v4开发的ASP.NET web应用程序。当您登录并离开页面大约15-20分钟时,我收到“堆栈不足以继续安全地执行程序。”System.Web.UI.Control.LoadRecursive() - 堆栈不足以继续安全地执行程序。

” “ ”

“据我所知,您无法尝试捕获.Net中的stackoverflow。我会想象,递归加载网页和活动会话检查导致这个错误(也许是一个不好的编码习惯)。我还添加了屏幕截图,因为我可以从堆栈跟踪中找出它。如果有人帮助我,这将有所帮助。

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',一个框架方法,正在使用它来确保正确的堆栈空间。它失败*可能*因为你有非常非常嵌套的ASP.NET控件。 – vcsjones

回答

1

我想我找到了解决方案。仍然是测试。检查this链接和this 他们真的看起来很有希望。我会让你们在我成功时更新..

谢谢大家的帮助。

0

问题是这样的调用堆栈是正确的在栈的末端。

有几件事情来寻找:

  1. 有没有在你的代码的任何地方使用的是.FindControl(string id)
  2. 如果是这样,它是定位一个控件,然后试图进一步找到它?
  3. 是否动态创建控件,如<asp:Placeholder/>控件。

当您从嵌套控件中引用父代时,它可以是递归的,然后由父代重新引用。