net树结构刷新问题

树结构是分别从4张表里取出来的,全放在viewstate中,数据少没问题,要是树的第4层有2000多个节点,刷一次,页面就卡死,1分多钟后正常。创建树的方法执行是3秒中,更改图片是1秒钟,首次访问正常,刷新为什么显示页面会卡死啊,1分多钟后正常。2台机子都是这样,刷新我只执行了换图片的方法,快救人啊

在pageload中的

if(!ispostback)

{

  ........

  createTreeView()

//createTreeView()中再调用二级节点的方法,依此类推,共4层

}

else

{

//用timer控件,每1分钟刷一次,更新树的图片

   UpdateTreeViewImg();

}

 

  private void UpdateTreeViewImg()
    {

        List<Model.c_unend_alarm> sAlarmList = new List<Model.c_unend_alarm>();
        sAlarmList = TreeBll.GetUnendAlarm();
        foreach (TreeNode tn_area in this.TreeView1.Nodes)
        {
            string aid = (tn_area.Value).ToString();
            foreach (TreeNode tn_group in tn_area.ChildNodes)
            {
                int a = 0;
                foreach (TreeNode tn_bureau in tn_group.ChildNodes)
                {
                    int b = 0;
                    foreach (TreeNode tn_device in tn_bureau.ChildNodes)
                    {
                        int c = 0;
                        string b_dID = (tn_device.Value).ToString();
                        string[] arry = b_dID.Split('*');
                        for (int i = 0; i < sAlarmList.Count; i++)
                        {

                            if (Convert.ToInt32(arry[0]) == sAlarmList[i].Device_id && Convert.ToInt32(arry[1]) == sAlarmList[i].Bureau_id && Convert.ToInt32(aid) == sAlarmList[i].Area_id)
                            {
                                tn_device.ImageUrl = "Web_Img/Alarm/red.gif";
                                tn_bureau.ImageUrl = "Web_Img/Alarm/red.gif";
                                tn_group.ImageUrl = "Web_Img/Alarm/red.gif";
                                a++;
                                b++;
                                c++;
                                break;
                            }
                        }
                        if (c == 0)
                        {
                            tn_device.ImageUrl = "Web_Img/Alarm/green.gif";
                        }
                    }
                    if (b == 0)
                    {
                        tn_bureau.ImageUrl = "Web_Img/Alarm/green.gif";
                    }
                }
                if (a == 0)
                {
                    tn_group.ImageUrl = "Web_Img/Alarm/green.gif";

                }
            }
        }

}

 

 public void CreateTree()
    {
        List<Model.c_area_info> Arealist = (List<Model.c_area_info>)ViewState  ["Arealist"];

               
        for (int i = 0; i < Arealist.Count; i++)
        {
            Model.c_area_info AreaModel = new Model.c_area_info();
            AreaModel = Arealist[i];
            TreeNode Fnode = new TreeNode();
            Fnode.Text = (AreaModel.Area_name).ToString();
            Fnode.Value = (AreaModel.Area_id).ToString();
            Fnode.Target = "right";
           
            this.TreeView1.Nodes.Add(Fnode);
            CreateChildNode(Convert.ToInt32(Fnode.Value), Fnode);
        }
    }

慕运维8079593
浏览 440回答 7
7回答

拉莫斯之舞

创建node的时候设置value值,然后用tree的FindNode方法,按需更新。

慕妹3242003

不要这样来处理, 用ajax从服务器取得要更新的内容, 用javascript来更新

一只名叫tom的猫

msdn对viewstate性能的: 必要时保存服务器控件视图状态 自动视图状态管理使服务器控件可以在往返行程中重新填充它们的属性值,而您不需要编写任何代码。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于 服务器,所以该功能影响性能。了解在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能,这样是有帮助的。例如,如果您将服务器控件绑定到每个往 返行程上的数据,因为控件的值会在数据绑定期间用新值替换,所以保存的视图状态没有用处。在这种情况下,禁用视图状态可以节省处理时间并减少页的大小   从上面,lz应该知道2000多条数据不做任何处理放在viewstate里面,对于页面数据传输及其处理是有多大的压力,建议楼主用以下几种方案解决:  一压缩viewstate的数据。  二用ajax异步读取数据,而不是所有的都读出来放在viewstate中

绝地无双

想进一步了解下,在我树形结构创建完后,我就不需要viewstate里的数据了,那我可以把viewstate里清空吗?

一只萌萌小番薯

ViewState很慢的 用js吧

慕桂英546537

嵌套了这么多的循环,又是树结构不卡才怪呢,建议每次只读取一级节点,当用户点击根节点展开的时候再读取该节点下的内容,也就是点什么,加载什么,这样子的话就不会你这么卡了,另外可以多用前台脚本去弄,减少FWQ端的压力

繁星淼淼

嵌套的循环是找节点下的子节点,有与数据库匹配的节点就换图片,要求就是要1分钟刷一次。要是我把节点全点开了,数据库有了新的数据,那你这方法就更新不了图片了
打开App,查看更多内容
随时随地看视频慕课网APP