可以“EndResponse”提高ASP.Net页面的性能
我的员工页面中有一个Response.Redirect
。 它重定向到Salary页面。
Response.Redirect ("Salary.aspx");
它工作正常,直到我添加了如下的exception处理。
try { Response.Redirect ("Salary.aspx"); } catch(Exception ex) { //MyLog(); throw new Exception(); } //Remaining code in event handler
这导致了一个新的exception,说“线程被中止”。我发现通过将重定向的endResponse
设置为false可以避免这种情况。
Response.Redirect(url, false); Context.ApplicationInstance.CompleteRequest();
新exception的解释:它总是抛出exception但由框架处理。 因为我添加了一个try..catch它被捕到了(我正在抛出一个新的exception)
注意: CompleteRequest
确实绕过了其他HTTPfilter和模块,但它不会绕过当前页面生命周期中的其他事件
注意:Response.Redirect将此exception抛出到当前页面的结束处理。 ASP .Net本身处理此exception并调用ResetAbort
继续处理。
题
- “将endResponse设置为false”是否可以提高性能,因为不会抛出exception?
- “将endResponse设置为false”是否会降低性能,因为页面生命周期事件未终止?
陷阱
- 如果将endResponse设置为
false
,则将执行eventhandler中的剩余代码。 因此,我们需要对剩余代码进行if
检查(检查:是否未满足重定向条件)。
参考
- 为什么Response.Redirect导致System.Threading.ThreadAbortException?
- ASP.NETexception“线程被中止”导致方法退出
结束响应( Response.Redirect(url)
或Response.Redirect(url, true)
) 将没有比Response.Redirect(url, false)
更好的性能。 如果使用false
,由于您可以控制代码执行,因此在您要重定向用户时,您根本无法再执行任何代码。
这在Response.Redirect()
的MSDN条目中指定:
如果为endResponse参数指定true,则此方法为原始请求调用End方法,该方法在完成时抛出ThreadAbortExceptionexception。 此exception对Web应用程序性能有不利影响 ,这就是建议为endResponse参数传递false的原因。
正如您所指出的,您需要关注页面生命周期事件。 如果要重定向用户( 不仅仅是为了提高性能 ),则不应继续执行页面事件。 我最近写了一个简短的例子, 说明如果不这样做,编码/规划不好会发生什么 。
该post的底线是Response.Redirect()
向浏览器返回302。 自页面执行继续以来Response.Redirect(url, false)
使用Response.Redirect(url, false)
时可能会出现问题,用户可以选择忽略302而不是看到已经呈现的页面…所以你需要采取措施确保他们看不到任何你不希望他们看到的东西。 Firefox的NoRedirect插件在测试时非常有用。
为获得最佳性能:使用"false"
作为endResponse
参数,确保您没有运行任何其他代码,并确保页面不会呈现您不希望用户忽略302的任何信息。
上述就是C#学习教程:可以“EndResponse”提高ASP.Net页面的性能分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/986804.html