如果我写这段代码
protected void Page_Load(object sender, EventArgs e)
{
Page_Load(sender, e);
}
我得到一个错误(无休止的递归):
,w3wp.exe
进程从task manager
终止。
精细...
但是,如果我这样做:
throw new ApplicationException(); //or SystemException();
它只出现在常规异常页面中。 (w3wp.exe仍在运行。)
问题:
P.S。 根据我刚刚写的内容,请考虑以下情况: 我可以写一个网页,在一个网站的农场托管我的网站,我可以通过创建递归终止整个w3wp.exe进程.....(还有其他人会有麻烦)......
你能回答我的问题吗?
感谢。
答案 0 :(得分:1)
这很有可能是着名的StackoverflowException
。它是由无限循环引起的,因为你一次又一次地调用方法Page_Load
。
来自MSDN:
在.NET Framework的早期版本中,您的应用程序可能会捕获 StackOverflowException对象(例如,要从中恢复) 无限递归)。但是,目前不鼓励这种做法 因为需要大量额外的代码来可靠地捕获a 堆栈溢出异常并继续执行程序。
从.NET Framework 2.0版开始,发生StackOverflowException 对象不能被try-catch块和相应的块捕获 进程默认终止。因此,建议用户 编写代码来检测并防止堆栈溢出。例如, 如果您的应用程序依赖于递归,请使用计数器或状态 条件终止递归循环。请注意一个应用程序 托管公共语言运行库(CLR)可以指定CLR 卸载堆栈溢出异常的应用程序域 发生并让相应的过程继续。更多 信息,请参阅ICLRPolicyManager界面和托管概述。
您可能想看一下这个答案:
答案 1 :(得分:0)
异常的原因是内存溢出。应用程序可以通过多种方式实现此目的,没有必要猜测具体方案。我应该保护良好的托管服务提供商免受行为不端的应用程序的影响。
答案 2 :(得分:-3)
添加可用的答案。因为服务器中的每个网站都在一个单独的AppDomain中运行,所以你无法完成整个过程。所以,如果你的代码行为不端只会被你的appdomain wud杀死。