日期:2014-05-18  浏览次数:20457 次

求救:选session还是viewstate来保存这样的数据~
各位大虾:
        小弟现在做一个系统,用到gridview,我使用了吴旗娃大哥的aspnetpager控件进行分页,每一次读取20行左右的数据到gridview中显示,现在我还需要在gridview中实现:排序,更新,删除,查看详细信息等操作,所以我希望在页面上能够保存读取到DATASET上的那20行数据;我想了一下能保存这些dataset数据的基本上也就是:session,viewstate;请问大虾们:像我这种情况,用那一个会好一些?为什么?(有人建议我使用cookies,小弟头脑迂腐觉得cookies.应该不能做这个保存吧,它的大小,数量都有限制的啊,也请大虾们指点一二哦~~谢谢了)

------解决方案--------------------
ViewState是存在页面上的,所以回传的时候会影响速度。
Sesssion存在服务器端,会占用内存。
还有一种方法就是使用静态变量,也是存储在服务器端,占用内存。

个人建议用ViewState,不要轻易动用session
------解决方案--------------------
如果其他页面还需要这些数据就用session,否则就用ViewState

ViewState是页面级的
------解决方案--------------------
还是考虑用ViewState比较好, Session太占服务器内存,还不稳定
------解决方案--------------------
用Session,比较灵活,操作起来也很方便,ViewState影响网速
Session虽然占用服务器内存,但是是可以接受的...

------解决方案--------------------
如果就二十条记录那就用:ViewState 吧,避免在访问一次数据库了。
------解决方案--------------------
如果访问量大的话保存到ViewState减小服务器负担,如果不大的话两者都行,20行的数据不会给传输造成太大压力,只要你的字段不是非常多
------解决方案--------------------
其实你如果想要知道哪种方法好,那你可以直接试验下,在哪种情况下(压力测试),页面显示的快些.session,viewstate有优点,有缺点
session对象不太稳定其次占web服务器的内存(当然服务器的配置到位了,就无所谓了)
viewstate是写在页面的隐藏字段里面,viewstate越多,页面显示的越慢!
利用数据库多一次查询了则是避免你把一定量的数据放在上面两个对象,而直接url传值,这样对于程序是简单了很多.如果是对于那些需要频繁访问的页面,则这样不太好.
------解决方案--------------------
很难有确确答案,具体情况具体分析,我总结下各位大虾的分析吧,
不足之处,还请大家指正,并加以补充

1.
ViewState 页面级别的,回传的时候会影响速度,当然响应的时候数据量也大;
其实主要是占网络带宽,如果你直接再次从数据库去这20条数据更快,还不如直接取;
难以跨页访问;
还要注意,这里需要一个序列化和反序列化的过程(ViewState是对文本的base64编码,而你服务断用使用的一般都是复杂对象,如DataTable)

2.
Session 存储在服务器端(内存),基于会话级别的,每个用户,对应自己的一个Session空间,各用户之间一般互不影响,例如你和我均用一样的关键字查询出一样的20条数据,还是存到各自的Session里面;
耗内存,有时还不稳定(Session丢失问题);
但方便,当前用户,在全局程序中可以使用(譬如跨页访问)

3.
Appliction 全局性的,这个一般我们不选择,好像无法设置过期时间,没有研究过

4.
Cache,缓存 !!!其实,对于 LZ 的这个问题,我是推荐Cache 的!不就是Cache嘛?
Cache 服务器端,并不与特定页或用户会话关联,它主要用于增强应用程序的性能。
个人认为,缓存最大优点就是可以设置单项过期时间(Session过期时间是针对整个应用程序的),以及依赖项(比如你缓存了某个文件,当其他用户更改了这个文件内容,你可以通过依赖项,通知缓存内容以更改,重新读取)
ASP.NET 的缓存是一门比较大学问,据说为什么MS吹嘘 aspx 比 asp 和jsp 性能都高,就是因为这个东东,
深入研究,请参看
ASP.NET 缓存概述 http://msdn2.microsoft.com/zh-cn/library/ms178597(VS.80).aspx
缓存应用程序数据 http://msdn2.microsoft.com/zh-cn/library/6hbbsfk6(VS.80).aspx

5.
至于cookies,我想在这个问题上,就忽略它了,长度限制了


6.
还有一种方法就是使用静态变量,也是存储在服务器端,占用内存。

至于这个所谓 “静态变量”,不大理解,个人一看到 asp.net 里面静态变量,就回避,因为你要明白asp.net 夜生命周期,对于 .aspx 里面 Page 类的静态变量是对于多个请求之间是没有意义的,


强烈推荐 Cache!!!!
------解决方案--------------------
ViewState是页面级的..可以用它.

不推荐Session,因为太耗服务器资源了.

Cache也不错
------解决方案--------------------
你这数据肯定很大,就用ViewState保存好了,如果网速够快没什么影响
可是你用Session那可是占了自己的服务器资源啊
如果同时提交的人很多你的内存需要多大的啊
搞不好你的IIS应用程序池就爆了
Session是很宝贵的
能省就省吧
------解决方案--------------------
Jinglecat(晓风残月) 分析的很透彻,但还是建议用viewstate好一些
------解决方案--------------------
建议用ViewState