项目中performance不是很好,有些页面viewstate很大,试图去掉一些viewstate,于是google了下原理,发现个很严重的问题,之前对viewstate的理解过于表面了。
比如页面一个textbox一个button,输入abc,按一下button后abc仍旧保存是因为存进了viewstate,如果把enableviewstate设成false的话,这个abc应该就会没了,但是事实上还是有的,这的确出乎很多的预期。
其实这个abc并未序列化至viewstate里
这里是原文分析,很透彻,很佩服此人的质疑和思考能力:http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx
这里还有篇国人提炼,也非常感谢:http://jswxpzy.blogbus.com/logs/16372140.html
序列化至viewstate的并不是所有的属性,其实跟页面/控件的生命周期息息相关。只有标记为dirty的属性才会被最终序列化至viewstate