我有一个以典型方式处理异常的 ASP.NET MVC 应用程序。我们尽可能尝试对它们进行编码(检查 null,使用 TryParse 等),并且我们不将它们用作流控制(即,我们从失败的方法返回 false,而不是抛出异常来表示失败)。我们在 application_error 中进行了全面的异常处理,以捕捉到那么远的任何事情。
我们有一个自定义控制器工厂,当无法创建控制器时,我们抛出了一个带有 HTTP 404 错误的 WebException。我们的企业安全团队会定期使用 McAfee 产品扫描我们的 Web 应用程序,该产品会访问具有大量已知易受攻击 URL 的网站。由于这些 URL 都没有与路由匹配,我们每分钟抛出数百个 404,我们的应用程序减速到爬行。我们迅速取出代码以在 404 上引发异常,但是现在高级管理人员担心诸如“内存泄漏”(因为这基本上是导致服务器速度变慢的原因……内存饱和)和 DOS。
现在我知道异常很慢。我一直在网上寻找,大多数指导方针都说要非常努力地确保它们不会发生,因为它们很慢(尤其是在深筹码的情况下)。我正在努力确定它们是否很糟糕,或者我的代码是否也有问题。如果异常处理这么糟糕,那不会为基于 asp.net 的应用程序带来一个非常简单的 DOS 吗?
任何一般的想法将不胜感激。现在我只是想解决这个问题。