提高asp.net应用程序性能的一些技巧(转自http://blog.aspcool.com/chyich/archive/2005/07/05/2584.html)
2005-07-26 22:28
621 查看
1.消除数据绑定控件的多重绑定
在绑定语句前加if (!Page.IsPostBck)语句,这样只有在第一次加载页面时,才进行绑定,页面回送时就不能再次绑定了.
在PreRender方法里绑定,PreRender事件发生在回送事件之后,在前面的事件(init,load,PostBackEvent)中处理完应该处理的事件后,在PreRender事件中绑定,这样能消除在多个回发事件中重复绑定控件,这个方法仅用在多个回发事件中要重复绑定控件的情况下,因为PreRender事件每次回发时都会触发.
2.尽量减小ViewState的大小
ViewState的作用是用来保存服务器控件(web server control)的状态,用以在页面回发时还原控件的值.如果我们在可以使用html控件的地方(html控件不会自动还原控件的值,因此它不使用viewState),使用html控件,而不是使用web server control,那么将有效的减小viewstate的大小,这样页面的体积就会减小.
在使用web server control时,如果只是在初始化页面时绑定一次数据,或者在每次回送页面时都要重新绑定数据,这种情况下可以不使用viewState,把控件的EnabledViewState属性设为false.特别是一些使用模板的控件,如DataGrid,DataList等.对模板控件禁用ViewState,将能有效的提高性能.
3.Server.Transfer和Response.Redirect
在有可能的情况,尽量使用Server.Transfer方法替代Response.Redirect方法.Response.Redirect回发一个响应头(Reponse heaer)到客户端,使客户端发一个新的Url请求到服务器.而Server.Transfer方法可以避免回发再请求这个过程,它只是简单的实现了服务器端的跳转.
当然不能什么时候都使用这种替换,因为Server.Transfer方法用了一个新Handler来处理新的请求.如果重定向到的页面需要验证和授权访问,就应该使用Response.Redirect方法.因为它们俩的机制不一样.当你用Response.Redirect方法的时候,你要首先确定你用的是第二参数为bool型的重载方法,把这个参数设置为false传进去以确保不会引发一个内部的异常.另一个要注意的地方是你只能要用Server.Transfer来把控件传给在同一个应用程序的某个页面.要把控件传给另一个应用程序的页面,你必须使用Response.Redirect方法,而不是Server.Transfer方法.
Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。
默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。
同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。
具体的请参见:http://blog.csdn.net/aaahts/archive/2004/07/26/51786.aspx,这篇文章对这些方法作了详细的说明.
在绑定语句前加if (!Page.IsPostBck)语句,这样只有在第一次加载页面时,才进行绑定,页面回送时就不能再次绑定了.
在PreRender方法里绑定,PreRender事件发生在回送事件之后,在前面的事件(init,load,PostBackEvent)中处理完应该处理的事件后,在PreRender事件中绑定,这样能消除在多个回发事件中重复绑定控件,这个方法仅用在多个回发事件中要重复绑定控件的情况下,因为PreRender事件每次回发时都会触发.
2.尽量减小ViewState的大小
ViewState的作用是用来保存服务器控件(web server control)的状态,用以在页面回发时还原控件的值.如果我们在可以使用html控件的地方(html控件不会自动还原控件的值,因此它不使用viewState),使用html控件,而不是使用web server control,那么将有效的减小viewstate的大小,这样页面的体积就会减小.
在使用web server control时,如果只是在初始化页面时绑定一次数据,或者在每次回送页面时都要重新绑定数据,这种情况下可以不使用viewState,把控件的EnabledViewState属性设为false.特别是一些使用模板的控件,如DataGrid,DataList等.对模板控件禁用ViewState,将能有效的提高性能.
3.Server.Transfer和Response.Redirect
在有可能的情况,尽量使用Server.Transfer方法替代Response.Redirect方法.Response.Redirect回发一个响应头(Reponse heaer)到客户端,使客户端发一个新的Url请求到服务器.而Server.Transfer方法可以避免回发再请求这个过程,它只是简单的实现了服务器端的跳转.
当然不能什么时候都使用这种替换,因为Server.Transfer方法用了一个新Handler来处理新的请求.如果重定向到的页面需要验证和授权访问,就应该使用Response.Redirect方法.因为它们俩的机制不一样.当你用Response.Redirect方法的时候,你要首先确定你用的是第二参数为bool型的重载方法,把这个参数设置为false传进去以确保不会引发一个内部的异常.另一个要注意的地方是你只能要用Server.Transfer来把控件传给在同一个应用程序的某个页面.要把控件传给另一个应用程序的页面,你必须使用Response.Redirect方法,而不是Server.Transfer方法.
Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。
如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。
默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。
同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。
具体的请参见:http://blog.csdn.net/aaahts/archive/2004/07/26/51786.aspx,这篇文章对这些方法作了详细的说明.
相关文章推荐
- 在ASP.NET 2.0中开发通配符映射应用程序的一些问题 (转自:http://www.cnblogs.com/dudu/archive/2006/03/07/345107.html)
- ASP.Net设计时需要考虑的性能优化问题 转载自http://blog.sina.com.cn/s/blog_3d7bed650100055p.html
- ASP.NET中的跳转:200, 301, 302(转自丁学的BLOG:http://www.cnblogs.com/dingxue/archive/2008/07/18/1245592.html,谢谢)
- 提高asp.net应用程序性能的一些技巧
- 提高asp.net应用程序性能的一些技巧
- [ASP.NET] Session 一些比较详细的知识(转自:http://blog.csdn.net/zhoufoxcn/archive/2006/11/08/1373685.aspx)
- 在asp.net中读取XML文件信息的4种方法 (http://www.cnblogs.com/liping19851014/archive/2007/10/16/926137.html)
- ASP.NET数据库连接字符串总结 转载 http://www.cnblogs.com/maplecumt/archive/2012/04/25/2469480.html
- 在Asp.net MVC中使用Asp.net Ajax --转载http://www.cnblogs.com/Nimeux/archive/2008/08/17/1269907.html
- ASP.NET生成静态页 (http://www.cnblogs.com/xlovey/archive/2007/11/16/961092.html)
- ASP.net的RUL重写http://www.cnblogs.com/hd/archive/2005/06/20/177633.html
- 提高asp.net应用程序性能的技巧
- http://www.cnblogs.com/dudu/archive/2011/03/05/asp_net_webform_mvc.html
- ASP.net 获得客户端的IP相关知识 --http://blog.joycode.com/ghj/archive/2008/02/20/114827.joy
- Asp.Net页面生命周期【转载,地址:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html】
- Asp. net Appliction LifeCycle 转自:http://www.cnblogs.com/Laeb/archive/2006/12/06/584436.html
- 提高asp.net ajax应用程序性能的一些方法
- 【转】JQuery跨域请求 (转http://www.cnblogs.com/myaspnet/archive/2010/12/30/1922335.html)
- 提高asp.net应用程序性能技巧
- Asp.net 基础 ( 一 ) 转自http://www.cnblogs.com/cyzyimao/archive/2010/07/20/1781495.html