页面中有一个repeater控件。用来显示用户列表。其中有一项是用来显示用户所属的用户组的,在用户列表表中只有用户组ID,所以在绑定时需要在itemdatabound中根据组ID来读取用户组名(见红字色部分)
protected void rtUser_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                Literal ltRole = (Literal)e.Item.FindControl("ltRole");
                ltRole.Text = user.GetRoleName(Convert.ToInt32(ltRole.Text));
                
            }
        }
问题:
如果每页显示二十条数据,那么每显示一页都要对数据库进行二十次读取操作,当访问量增大时,这个服务器肯定无法承受。请问大家遇到此种情况是如何解决的?

解决方案 »

  1.   

    改sql,用inner join 连接两个表
      

  2.   

    用户实体类中,通过属性绑定用户组对象
    <%# Eval("对象.属性")%>
      

  3.   

    一种是你用视图读取还有一种是对datatable处理一下把 所有的ltRole.Text 这个都读取出来,然后一次性在数据库里全部读取出来,然后放入hash或dic中然后在用函数反回来读两种方法,你看懂了么?
      

  4.   

    还可在 sql中
    select a.*,b.name from user as a left join group as b on a.gid=b.id
      

  5.   

    改sql,用inner   join   连接两个表
    -----------------------
    我其实想过用这个方法的。因为涉及到分页(网上流行的分页方式那种)多表联接查询又得要改逻辑了!!用户实体类中,通过属性绑定用户组对象
    <%# Eval("对象.属性")%>
    ---------------------------------
    没弄明白。能举个例子吗?
    还有一种是对datatable处理一下把 所有的ltRole.Text 这个都读取出来,然后一次性在数据库里全部读取出来,然后放入hash或dic中然后在用函数反回来读 
    ——————————————————————
    这种是不是太复杂化了?
      

  6.   

    //这种是不是太复杂化了?我说的改成视图就是inner join...这样你变化大不??还有很多方法,比如说你这个表的量比较小直接放到内存中,根本不走数据库....优化的方式很多,我说的是一种算法优化...其实也无非就是拿空间换时间的思想....你考虑一下你牺牲什么为代价吧....