asp.net中的树视图控件加载节点的速度非常慢

本文关键字:速度 节点 非常 加载 视图 net asp 控件 | 更新日期: 2023-09-27 17:58:46

在我的asp.net网页上,树视图控件有数千个节点,树的加载速度非常慢。节点数据来自sql数据库,使用以下代码。我们可以做些什么来优化或提高性能。

public partial class TaxonomyAllTermsTree : System.Web.UI.Page
  {
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!this.IsPostBack)
    {
        this.AddNodes(this.TreeView1.Nodes, 0, this.LoadData());
        TreeView1.CollapseAll();
    }
  }

  private void AddNodes(TreeNodeCollection nodes, int level, System.Data.DataTable dt)
  {
    string filterExp = string.Format("ParentID='{0}'", level);
    foreach (System.Data.DataRow r in dt.Select(filterExp))
    {
        TreeNode item = new TreeNode()
        {
            Text = r[2].ToString(),
            Value = r[1].ToString(),
            NavigateUrl = "SomeURL.aspx?TermID=" + r[0].ToString()
        };
        this.AddNodes(item.ChildNodes, int.Parse(r[0].ToString()), dt);
        nodes.Add(item);
    }
  }
  private System.Data.DataTable LoadData()
  {
    DataTable dt = new DataTable();
    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ThesaurusConnectionString"].ConnectionString;
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        SqlCommand cmd = new SqlCommand("GetFullTree", connection);
        cmd.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
        return dt;
    }
  }
}

asp.net中的树视图控件加载节点的速度非常慢

1)如@Azhar所述,将ExpandDepth设置为0

ExpandDepth-获取或设置首次显示TreeView控件时展开的级别数。

2)使用ASP.NET缓存将DataTable存储在缓存中一段时间,以避免不必要的数据库访问,这肯定会提高性能。

以下是一些关于缓存的有用文章:

  1. 如何将项目添加到缓存
  2. 如何从缓存中删除项目

这里有一个的例子

//The item will be in the cache for 10 minutes
DataTable table = LoadData();
Cache.Insert("TreeView", table, null, DateTime.Now.AddMinutes(10), TimeSpan.Zero);

检查缓存中是否存在密钥,如果它确实从缓存加载数据,否则从数据库加载数据并将其插入缓存:

if (Cache["TreeView"] != null)
{
    var table = Cache["TreeView"] as DataTable;
    //Do something with the DataTable
}
else
{
    DataTable table = LoadData();
    Cache.Insert("TreeView", table, null, DateTime.Now.AddMinutes(1), TimeSpan.Zero);
} 

希望这些例子能帮助到你!