提高asp.net应用程序性能的一些技巧
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,这篇文章对这些方法作了详细的说明.