提问人:ilasno 提问时间:8/5/2023 最后编辑:ilasno 更新时间:8/8/2023 访问量:20
如何防止 ASP.NET 请求期间出现堆栈溢出错误?
How can i safeguard against a stack overflow error during an ASP.NET request?
问:
在我们 ASP.NET MVC Web 应用程序中,我们标识了一个代码路径,该路径可能会导致堆栈溢出,从而关闭应用程序池并返回 503 服务不可用给客户端。这个 SO 问题有助于识别它。
我只是想通过抛出异常来防止堆栈溢出,或者我也尝试调用 Response.End()。但是我继续得到堆栈溢出结果。我应该能够通过抛出异常来避免堆栈溢出,这显然取决于正确识别导致溢出的原因并在正确的点抛出。似乎也有可能在 Global.asax 的Application_OnError中(重新)触发溢出,这发生在我抛出异常之后。
您能否提供任何指导,说明在检测到最终堆栈溢出时如何正常恢复,而不仅仅是在 ASP.NET MVC 请求的上下文中修复代码以完全防止这种情况发生?
这基本上就是我正在尝试做的事情,检查我们是否正在走向堆栈溢出:
if ((HttpContext.Current != null) && (HttpContext.Current.Cache != null))
{
string idrs = "IsDebugCount";
int max = 1000000;
int idc = 0;
object idco = HttpContext.Current.Cache[idrs];
if (idco != null)
idc = (int)idco;
idc += 1;
//log4net.LogManager.GetLogger("IsDebug").Error("idc=" + idc);
if (idc > max)
{
string freakout = "IsDebug has been consulted > " + max +
" times. This seems problematic.";
log4net.LogManager.GetLogger("IsDebug").Error(freakout);
throw new ArithmeticException(freakout);
HttpContext.Current.Response.End();
}
HttpContext.Current.Cache[idrs] = idc;
}
我已经单独尝试了 和 ,都没有达到避免导致应用程序池崩溃的堆栈溢出的预期效果。throw
Response.End()
答: 暂无答案
评论