语言:C# 
平台:WEB 我现在用了3个FOR 分别生成HyperLink  大类,小类,详细类,这样实现了效果,可是速度慢的是一塌糊涂,请问这个应该怎么优化呢? 
for (int i = 0; i < proo.Select().Rows.Count; i++)
            {
                HyperLink hy = new HyperLink();                if (i == 0)
                {
                    hy.Text = proo.Select().Rows[i]["Name"].ToString() + "</BR>";                }
                else
                {
                    hy.Text = "</BR>" + "</BR>" + proo.Select().Rows[i]["Name"].ToString() + "</BR>";
                }                hy.CssClass = "reg111";
                Panel1.Controls.Add(hy);
                pro1.da = proo.Select().Rows[i]["Name"].ToString();
                for (int ix = 0; ix < proo1.Select().Rows.Count; ix++)
                {
                    if (proo1.Select().Rows[ix]["da"].ToString() == proo.Select().Rows[i]["Name"].ToString())
                    {
                        HyperLink hy1 = new HyperLink();
                        hy1.Text = proo1.Select().Rows[ix]["xiao"].ToString() + "</BR>";
                        hy1.CssClass = "menu";
                        Panel1.Controls.Add(hy1);                        for (int ixx = 0; ixx < proo2.Select().Rows.Count; ixx++)
                        {
                            if (proo2.Select().Rows[ixx]["xiao"].ToString() == proo1.Select().Rows[ix]["xiao"].ToString())
                            {
                                HyperLink hy12 = new HyperLink();
                                hy12.Text = proo2.Select().Rows[ixx]["xx"].ToString() + "</BR>";
                                hy12.CssClass = "bai12";
                                Panel1.Controls.Add(hy12);                            }                        }
                    }                }            }

解决方案 »

  1.   

    1.对于Webform我没什么经验,不过我们在Winform中,要加载的树如果太复杂,也会遇到类似的问题,一般来说,我们的做法是分级加载,比如首先加载第一级节点,用户点击后或者系统空闲时再加载第二级节点,再第三级...
    2.如果proo.Select()的结果要反复使用的话,预先保存它的结果,不要小看这样的操作浪费的时间。我如果是你的话,只在循环开始前执行一次,然后就一直使用了。
      

  2.   

    楼主很傻,proo1.Select().Rows[i] 这么多这种代码;不慢才怪。每一个Select要返回一个新数组,有意义吗?
    for (int i = 0; i < proo.Rows.Count; i++) //去掉Select()优化后代码:            int nameIndex = proo.Columns.IndexOf("Name");
                int xiaoIndex = proo.Columns.IndexOf("xiao");
                int daIndex = proo.Columns.IndexOf("da");            for (int i = 0; i < proo.Rows.Count; i++)
                {
                    HyperLink hy = new HyperLink();                if (i == 0)
                    {
                        hy.Text = proo.Rows[i][nameIndex].ToString() + "</BR>";
                    }
                    else
                    {
                        hy.Text = "</BR></BR>" + proo.Rows[i][nameIndex].ToString() + "</BR>";
                    }                hy.CssClass = "reg111";
                    Panel1.Controls.Add(hy);                pro1.da = proo.Rows[i][nameIndex].ToString();                for (int ix = 0; ix < proo1.Rows.Count; ix++)
                    {
                        if (proo1.Rows[ix][daIndex].ToString() == proo.Rows[i][nameIndex].ToString())
                        {
                            HyperLink hy1 = new HyperLink();
                            hy1.Text = proo1.Rows[ix][xiaoIndex].ToString() + "</BR>";
                            hy1.CssClass = "menu";
                            Panel1.Controls.Add(hy1);                        for (int ixx = 0; ixx < proo2.Rows.Count; ixx++)
                            {
                                if (proo2.Rows[ixx][xiaoIndex].ToString() == proo1.Rows[ix][xiaoIndex].ToString())
                                {
                                    HyperLink hy12 = new HyperLink();
                                    hy12.Text = proo2.Rows[ixx][daIndex].ToString() + "</BR>";
                                    hy12.CssClass = "bai12";
                                    Panel1.Controls.Add(hy12);
                                }
                            }
                        }
                    }
                }
      

  3.   

    顶 ,还有用foreach也会比for的效率高
      

  4.   

    不好,从数据库直接输出定格式,最方便。比如:创建临时表,插入树形数据,可以以001,001001之类的代表节点。
    前台读取后,可以很方便的完成显示。或者生成XML也是一样的。有些东东在检索的时候就应该本着客户端处理方便的意图由数据库去完成整理数据的工作。
      

  5.   


    这个怎么可能去掉Select() ? Select() 是我写的一个SQL查询语句!
      

  6.   

    你倒说说proo1是什么类型的对象?
      

  7.   

    请大家回答这个http://topic.csdn.net/u/20090816/13/237022f6-dab5-4d59-8820-0eeffd5ad7b5.html?58963  这个给的分多,别回答这个帖了