欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

化恶魔为天使,巧移ViewState至SqlServer

程序员文章站 2022-04-06 22:43:36
...

(发文后记:还是说清楚前提吧,本文只适用于当不得已才使用ViewState的情况) ViewState 一直以来备受争议,主要是因为他臃肿的体积,导致客户的的回传( PostBack )数据量很大,而其中真正有用的数据又很少,网络带宽被浪费不说,用户的体验也很差。 最近

(发文后记:还是说清楚前提吧,本文只适用于当不得已才使用ViewState的情况)
ViewState
一直以来备受争议,主要是因为他臃肿的体积,导致客户的的回传(PostBack)数据量很大,而其中真正有用的数据又很少,网络带宽被浪费不说,用户的体验也很差。

最近项目中用到了TelerikRadGrid,使用服务器端绑定数据后页面ViewState体积过大,而导致性能严重降低,便开始找寻优化方式,尽量将ViewState存在务器端

由于项目已开发至中期,不可能做类似于取消ViewState或使用客户端绑定之类的大规模改动。

要想改动量最小化,肯定不能影响原有ViewState的使用,那只能重写Page类的LoadPageStateFromPersistenceMedium()SavePageStateToPersistenceMedium(object state)的方法,在这两个Override的方法中把数据存在别的什么地方。

这时候就来问题了,ViewState只是一个页面的周期,每打开一个页面都会生成一个新的ViewState,连刷新都不例外,如果存在文件或数据库中,这些数据累积起来可不是开玩笑的,而且也用不上了,那还不得要写过期删除的方法么?太麻烦了。这时候,Session就发挥大作用了,Session的生命周期长于ViewState,过期会自动删除,而且还是存在服务器端的,不会增加数据传输量,看来很合适。

代码如下: