首页 新闻 会员 周边 捐助

当 ViewState["dt"] 很大的时候,用什么方式保存比较好

0
悬赏园豆:5 [已解决问题] 解决于 2012-10-24 09:38

以下代码,因为 ViewState["dt"] 体积大,确实让ADSL用户刷新页面慢,我想放在cookies,但是它只能储存字符串,如果用Session保存,又担心用户多,又占用服务器资源, 如果不用 ViewState["dt"] 保存,每次去查询SQL SERVER, 又担心查询次数太多,占用太多服务器资源, 大家有没有好的办法呢?

//求得下拉框的参数
  Maticsoft.BLL.Apm bll = new Maticsoft.BLL.Apm();
  DataTable idt;
  idt = bll.GetAllList().Tables[0];
  ViewState["dt"] = idt;
  //加工点
  DataView dv1 = new DataView(idt);
  dv1.RowFilter = ("parentcode='35'");
  txtga02.DataSource = dv1;
  txtga02.DataTextField = "cinvcname";
  txtga02.DataValueField = "no";
  txtga02.DataBind();
  txtga02.Items.Insert(0, new ListItem("", ""));
  txtga02.SelectedIndex = 0;

zhengyingcan的主页 zhengyingcan | 初学一级 | 园豆:12
提问于:2012-10-09 09:54
< >
分享
最佳答案
0

用Cache 适合。 文件太大 不用ViewState、不用cookie。

收获园豆:5
Qlin | 老鸟四级 |园豆:2403 | 2012-10-09 11:33

假如用cache也不好,因为那个经常要更新,并且cache有时间限制,保不准什么时间段就过期了. cache有一个最不好的地方,就是共用的.如果一个用户删掉了进行更新,另外一个用户可能马上调不出来

我这种看法对吗

zhengyingcan | 园豆:12 (初学一级) | 2012-10-09 11:38

@zhengyingcan: 

不想频繁查询数据库,肯定得缓存起来。

ViewState:

是放在客户端的页面上的,单个用户,每个用户打开页面加载时一样会去数据库读,用户多了,也成问题;

如果关闭页面了,下次重新打开,不也得重新加载吗,从数据库读。

如果ViewState太大了,性能问题。

cookie:

也是存客户端,存放的数据格式有限,你可以序列化成字符串保存,只能缓存单个用户。

用户多了,拿什么来减少查询数据库。

数据大了,也影响性能。跟ViewState差不多,就是有一个持久cookie 。

session:存服务器端,还是单个用户,每个用户一份,每个session都得去查数据库,数据大了,耗内存。

cache:全局共享,第一次加载填充cache;

共享更新问题,Cache本身就线程安全的,防并发的,放心使用。

你更新时,先更新数据库,再更新cache,如果cache为空,就去查数据库,再填充cache,你说的 删除cache了,此时别人再访问cache时为空,自然会去数据库读,再填充cache,你也不用担心更新cache时被覆盖了,人家cache是安全的。

更新cache,也不一定就要删除cache吧,直接赋值。

Qlin | 园豆:2403 (老鸟四级) | 2012-10-09 17:25
其他回答(4)
0

你可以是用cache来保存的啊

chenping2008 | 园豆:9836 (大侠五级) | 2012-10-09 10:03
0

方法很多,看你各方面取舍了

如果不想给你的服务端造成太大压力,可以缓存到客户端

田林九村 | 园豆:2367 (老鸟四级) | 2012-10-09 10:12

缓存在客户端是最好的办法,但是缓存必须要用到ViewState["dt"],但是ViewState["dt"]体积太大,光纤的没有问题,但是ADSL,就出问题了,  假如用cache也不好,因为那个经常要更新,并且cache有时间限制,保不准什么时间段就过期了. cache有一个最不好的地方,就是共用的.如果一个用户删掉了进行更新,另外一个用户可能马上调不出来.

支持(0) 反对(0) zhengyingcan | 园豆:12 (初学一级) | 2012-10-09 10:25
0

看你方法的取名“GetAllList()”难道是取出所有数据?然后放到viewstate里面?没这么存的吧?即使是cache,也不该这么存吧?

顾晓北 | 园豆:10898 (专家六级) | 2012-10-09 11:39

能不能帮忙举个例子,谢谢

支持(0) 反对(0) zhengyingcan | 园豆:12 (初学一级) | 2012-10-09 12:04

@zhengyingcan: 即使是你真想要存在viewstate里面,那这个viewstate是要存到客户端的,你把所有数据全存到客户端这当然不行,如果这个列表里面有一万条数据你也都发送到客户端吗?显然没必要,你首先要想到的是:要分页!,客户需要看到的只是一页数据,那就只给他一页数据,比如你的列表总共有一万条数据,但是客户只需要看到10条,那你把这10条发送到客户端就行了,你这个还远没遇到性能问题呢。

支持(0) 反对(0) 顾晓北 | 园豆:10898 (专家六级) | 2012-10-09 14:55
0

既然经常更新,每次都从数据库查就是了,把parentcode='35'条件放sql里查。

貌似你的txtga02是个下拉框吧?下拉框能有多少数据,没什么影响。

 

向往-SONG | 园豆:4853 (老鸟四级) | 2012-10-09 13:48

这样子肯定是没有问题的,只是担心用户太多,查询次数也多,会降低服务器效率.

支持(0) 反对(0) zhengyingcan | 园豆:12 (初学一级) | 2012-10-09 13:49
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册