如果我写这段代码

  protected void Page_Load(object sender, EventArgs e)
    {
        Page_Load(sender, e);
    }


我得到一个错误(无限递归):



并且w3wp.exe进程从task manager终止。

精细...

但是,如果我这样做:

throw new ApplicationException(); //or SystemException();


它仅显示在常规例外页面中。 (w3wp.exe仍然启动)。

问题:


什么样的异常导致w3wp.exe关闭?
什么样的异常导致应用程序池关闭?


ps
根据我刚才写的内容,请考虑以下情形:
我可以编写一个网页,将我的网站托管在一个站点中,并且可以通过创建递归来终止整个w3wp.exe进程.....(其他人也会遇到麻烦)...

你能回答我的问题吗?

谢谢。

最佳答案

这很可能是著名的StackoverflowException。它是由无限循环引起的,因为您一次又一次地调用方法Page_Load

从MSDN:


在早期版本的.NET Framework中,您的应用程序可能会捕获
一个StackOverflowException对象(例如,从
无限递归)。但是,目前不鼓励这种做法
因为需要大量额外的代码才能可靠地捕获
堆栈溢出异常并继续执行程序。

从.NET Framework 2.0版开始,一个StackOverflowException
try-catch块和相应的对象不能捕获对象
进程默认终止。因此,建议用户
编写他们的代码以检测并防止堆栈溢出。例如,
如果您的应用程序依赖于递归,请使用计数器或状态
条件以终止递归循环。注意一个应用
承载公共语言运行库(CLR)的计算机可以指定CLR
卸载堆栈溢出异常所在的应用程序域
发生并让相应的过程继续。欲了解更多
有关信息,请参阅ICLRPolicyManager接口和托管概述。


您可能想看看这个答案:

https://stackoverflow.com/a/4802309/284240

10-07 19:47
查看更多