为了账号安全,请及时绑定邮箱和手机立即绑定

net树结构刷新问题

net树结构刷新问题

慕运维8079593 2018-12-06 23:49:01
树结构是分别从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);        }    }
查看完整描述

7 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-01-21
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

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

查看完整回答
反对 回复 2019-01-21
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

msdn对viewstate性能的:

必要时保存服务器控件视图状态 自动视图状态管理使服务器控件可以在往返行程中重新填充它们的属性值,而您不需要编写任何代码。但是,因为服务器控件的视图状态在隐藏的窗体字段中往返于 服务器,所以该功能影响性能。了解在哪些情况下视图状态会有所帮助,在哪些情况下它影响页的性能,这样是有帮助的。例如,如果您将服务器控件绑定到每个往 返行程上的数据,因为控件的值会在数据绑定期间用新值替换,所以保存的视图状态没有用处。在这种情况下,禁用视图状态可以节省处理时间并减少页的大小

 

从上面,lz应该知道2000多条数据不做任何处理放在viewstate里面,对于页面数据传输及其处理是有多大的压力,建议楼主用以下几种方案解决:

 一压缩viewstate的数据。

 二用ajax异步读取数据,而不是所有的都读出来放在viewstate中

查看完整回答
反对 回复 2019-01-21
?
绝地无双

TA贡献1946条经验 获得超4个赞

想进一步了解下,在我树形结构创建完后,我就不需要viewstate里的数据了,那我可以把viewstate里清空吗?
查看完整回答
反对 回复 2019-01-21
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

ViewState很慢的 用js吧

查看完整回答
反对 回复 2019-01-21
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-01-21
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

嵌套的循环是找节点下的子节点,有与数据库匹配的节点就换图片,要求就是要1分钟刷一次。要是我把节点全点开了,数据库有了新的数据,那你这方法就更新不了图片了
查看完整回答
反对 回复 2019-01-21
  • 7 回答
  • 0 关注
  • 431 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信