ASP.Net页面能“EndResponse”提高性能(Can “EndResponse” incr

2019-06-21 15:10发布

我有一个Response.Redirect在我的员工页面。 它重定向到工资页。

Response.Redirect ("Salary.aspx");

这是工作的罚款,直到我说的异常如下处理。

try
{
   Response.Redirect ("Salary.aspx");
}
catch(Exception ex)
{
//MyLog();
    throw new Exception();
}

//Remaining code in event handler

这引起了新的异常说“线程已被中止”,我才知道,这可以通过设置来避免endResponse为假的重定向。

Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();

新的异常的说明:它总是抛出异常,而是由框架处理。 自从我加入一条try..catch被抓住那里(和我举办了一个新的异常)

注: CompleteRequest并绕过进一步HTTP过滤器和模块,但它不会在当前页面生命周期绕过其他事件

注:Response.Redirect的抛出此异常来结束当前页的处理。 ASP.NET的自己处理这个异常,并呼吁ResetAbort继续处理。

  1. 无论是“设置endResponse为假”可以提高性能,因为没有抛出异常?
  2. 无论是“设置endResponse为假”,因为页面生命周期事件不会终止会降低性能?

陷阱

  1. 如果设置endResponse为false ,在事件处理程序剩余部分的代码会被执行。 因此,我们需要做一个if检查剩余的代码(检查:如果重定向标准未能实现)。

参考

  1. 为什么Response.Redirect的原因System.Threading.ThreadAbortException?
  2. ASP.NET例外“线程已被中止”导致方法退出

Answer 1:

结束响应( Response.Redirect(url)Response.Redirect(url, true)将不会比更好的性能Response.Redirect(url, false) 随着false ,因为你可以控制代码执行,你可以简单的情况下不执行任何代码你打算什么时候将用户重定向。

这是在指定的MSDN项对于Response.Redirect()

如果指定endResponse参数true,则此方法调用原始请求时,它完成时抛出一个ThreadAbortException异常End方法。 此异常对Web应用程序的性能 ,这就是为什么通过虚假的推荐的endResponse参数产生不利影响

你需要关注的页面生命周期事件,正如你指出。 你不应该继续执行该页面中的事件,如果你打算将用户重定向( 不仅性能 )。 我最近写了一个简单的例子显示会发生什么 ,如果你不差编码/规划。

该柱的底线是Response.Redirect()返回一个302到浏览器。 有对问题的潜力,当您使用Response.Redirect(url, false)因为页继续执行,并且用户可以选择忽略的302,而是看会一直呈现的网页...所以你需要采取措施以确保他们没有看到你不希望他们看到的任何东西。 该NoRedirect附加测试这个当Firefox是有帮助的。

为了获得最佳性能:"false"作为endResponse参数,确保您没有运行任何进一步的代码,并确保该页面是不会使你不希望用户查看他们是否忽视了302的任何信息。



文章来源: Can “EndResponse” increase performance of ASP.Net page