问题背景:1 数据库有4个表 问卷表(问卷id,问卷name,问卷设置项)
问题表(问题id,问题name,问卷id,问题设置项)
选项表(选项id,选项名称,问卷id,问题id,选项设置项)
统计表(选项id,问卷id,问题id,票数)
2 每个用户投完票,遍历其问卷,写入到统计表
问题: 当进行显示投票结果编程的时候,以下是我的做法
  gridview1建立一个模版列,加入一个label(绑定到问题名称)和另外一个gridview2(gridview2是显示相应问题下每个问题的投票结果的)
***********************问题关键描述**************************
那么开始需要查询数据库取得特定问卷下所有的问题(id和名称)
然后在对gridview1每行Databound时我还得查询数据库取得相应问题下所有选项的统计结果和gridview2进行绑定
***********************问题关键描述**************************
从"问题关键描述"块的内容可以看出如果某个问卷问题比较多(或者还有可能同时有多个用户查看投票结果的话)那么就得多次查询数据库服务器,对db服务器的压力就好大,目前我想到的一种做法就是将问卷下所有问题选项的统计结果用viewstate或者session缓存起来,请问各位有什么更好的解决这种需要多次查询数据库的办法么?

解决方案 »

  1.   

    viewstate:页面级别的缓存,不可能存储太大的数据量
    session缓存容易丢失数据,会过期
    用单件类缓存到服务器吧,如果数据量大,并且经常需要访问
      

  2.   

    to hdt(倦怠):
    缓存这个东东还没用过,兄弟能否给出使用中的注意事项!
    感觉因为用户每次投票完后,缓存应该需要更新吧?如果仅仅是浏览已投票的结果不涉及到投票操作,那么缓存倒是个不错的方法,不过不知道怎么样来找到其中的平衡点
      

  3.   

    ls说的我很感兴趣,用cache减少服务器开销。可惜没用过,只能学习。
      

  4.   

    to yzn800930(灌水有理,偷窥无罪):
      数据量估计应该不大,你也看到过一般问卷调查最多也就30个问题左右,大概6个选项那么就是将近200条记录,关键是在显示投票结果的时候减少访问数据库的次数.
      不知道你说的单件类缓存到服务器是怎么来做,能否给出个大概的模版?
      

  5.   

    更新操作时可以同时更新Cache缓存,或者每半小时让缓存过期,再请求时重新填充一次缓存
      

  6.   

    单件类就是Cache类,网上有很多事例,一个不可继承,具有静态的构造函数的类,在请求时就加载到服务器,相当于一个Application[""],自己定义自己的操作方法
      

  7.   

    to yzn800930(灌水有理,偷窥无罪):
    哦,原来如比啊,我查查看,能否给出使用单件类的注意事项了?
    其他各位还有没有好的方法建议了?
      

  8.   

    没有过Cache,Session会丢失.如果Cache可行而且不想经常查询数据库的话,建议用...
      

  9.   

    to yzn800930(灌水有理,偷窥无罪);
    从我的"关键问题描述"你可以知道,我要访问的要么是问题表要么就是选项表和统计表(连接查询)
    不存在你说的字典表.我看了一篇使用cache类的文章,不过粗略考虑了下,
     我用的是连接查询得到datatable,那么我缓存的就是这个datatable
           Cache mycache = new Cache();
           mycache["vote"] = mydatatable;
    不过这个cache是应用程序级别的,对所有用户有效,那么另外一个用户投完票后还得查询更新对应的项了?
      

  10.   

    to ERPCoder(Most Valuable Player) :
    "没有过Cache,Session会丢失,如果Cache可行而且不想经常查询数据库的话,建议用..."大哥我需要的是经过你自己证明的方法和建议啊,连你自己都不确定好用不,怎么说服我来用了?