“EndResponse”可以提高 ASP.Net 页面的性能吗
Posted
技术标签:
【中文标题】“EndResponse”可以提高 ASP.Net 页面的性能吗【英文标题】:Can "EndResponse" increase performance of ASP.Net page 【发布时间】:2012-11-23 12:37:40 【问题描述】:我的员工页面中有一个Response.Redirect
。它重定向到薪水页面。
Response.Redirect ("Salary.aspx");
在我添加如下异常处理之前它工作正常。
try
Response.Redirect ("Salary.aspx");
catch(Exception ex)
//MyLog();
throw new Exception();
//Remaining code in event handler
这导致了一个新的异常,说“线程被中止”。我知道可以通过将endResponse
设置为 false 重定向来避免这种情况。
Response.Redirect(url, false);
Context.ApplicationInstance.CompleteRequest();
新异常的解释:它总是抛出异常但由框架处理。由于我添加了一个 try..catch 它被捕获在那里(并且我抛出了一个新的异常)
注意:CompleteRequest
确实会绕过更多 HTTP 过滤器和模块,但不会绕过当前页面生命周期中的更多事件
注意:Response.Redirect 抛出此异常以结束当前页面的处理。 ASP .Net 本身处理此异常并调用ResetAbort
以继续处理。
问题
-
“将 endResponse 设置为 false”是否可以提高性能,因为没有抛出异常?
由于页面生命周期事件未终止,“将 endResponse 设置为 false”是否会降低性能?
坑
-
如果将 endResponse 设置为
false
,则将执行事件处理程序中的剩余代码。所以我们需要对剩余的代码进行if
检查(检查:是否不满足重定向条件)。
参考
-
Why Response.Redirect causes System.Threading.ThreadAbortException?
ASP.NET exception "Thread was being aborted" causes method to exit
【问题讨论】:
Performance
可以从不同的方面来衡量!!!你到底期待什么?
@huMptyduMpty 从以下几个方面看性能 1) 页面响应时间 2) 内存使用情况
另外,由于您试图提高网站性能,这个article 也可能会提供一些信息
我认为如果您担心Response.Redirect
抛出异常会导致性能问题,那么您可能会过早地进行优化。
你的问题是你的异常处理很糟糕。只需摆脱此类 try/catch 块,而是使用 ASP.NET Health Monitoring。
【参考方案1】:
结束响应(Response.Redirect(url)
或 Response.Redirect(url, true)
)不会比Response.Redirect(url, false)
有更好的性能。使用false
,由于您可以控制代码执行,因此在您要重定向用户的情况下,您根本无法再执行任何代码。
这是在MSDN entry 中为Response.Redirect()
指定的:
如果为 endResponse 参数指定 true,则此方法会为原始请求调用 End 方法,该方法在完成时会引发 ThreadAbortException 异常。 此异常对 Web 应用程序性能有不利影响,这就是为什么建议为 endResponse 参数传递 false 的原因。
正如您所指出的,您确实需要关注页面生命周期事件。如果您要重定向用户(不仅仅是为了性能),则不应继续执行页面事件。我最近写了一个简短的例子,显示 what can happen 如果你不这样做的话,编码/规划很差。
该帖子的底线是Response.Redirect()
向浏览器返回 302。当您使用 Response.Redirect(url, false)
时可能会出现问题,因为页面会继续执行,并且用户可以选择忽略 302,而是看到 将呈现 的页面......所以你需要采取措施确保他们看不到您不希望他们看到的任何内容。测试时,Firefox 的 NoRedirect 插件很有帮助。
为了获得最佳性能:使用"false"
作为endResponse
参数,确保您没有运行任何进一步的代码,并确保页面不会呈现任何您没有的信息'不想让用户看到他们是否忽略了 302。
【讨论】:
以上是关于“EndResponse”可以提高 ASP.Net 页面的性能吗的主要内容,如果未能解决你的问题,请参考以下文章
Response.Redirect 方法的 endResponse 参数的默认值是多少