200分 寻求解决方案,上万节点的树 效率问题

live_7sky 2008-05-30 02:11:12

一个树有 3000-5000 个节点左右,树有2个地方要用,一个是 对树的 添加,修改,删除,

另外一个地方是设置权限,对树添加了 checkbox,

目前使用是 MZtreeview , 但是发现 2000 个节点的时候马马虎虎,多了就 不能用了..

大家有什么好解决方案:

数据都是从数据库 读取出来的(有点慢)

数据库结构

id(节点) ,fatherid(父节点) ,text(文本)
...全文
295 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyblackhole 2008-06-01
  • 打赏
  • 举报
回复
while (dr.Read())
{
tree += "tree.N[\"" + dr.GetString(1) + "_" + dr.GetString(0) + "\"] = \"T:" + dr.GetString(2) + "; D:id=" + dr.GetString(0) + "\"\r\n";
}

这样得多少次啊?
数库设计是用LIKE还是用紧密的父子关联查询?用了缓存技术吗?
ggygd 2008-05-30
  • 打赏
  • 举报
回复
树的层级尽量不要太多,加上加载数据量大,加载是会很慢的

yutian1225 2008-05-30
  • 打赏
  • 举报
回复
我没做过这么多的节点。
读数据肯定会影响速度,建议用DataSet来保存,这样应该快点。
树的节点的建立就是递归建立,不会很快。我知道一个笨方法,就是做成静态链表,然后依次生成树的节点。
codeangel 2008-05-30
  • 打赏
  • 举报
回复
用存储过程
我这里有两个32层以上树型结构的递归方法的两个自定义函数.
见http://www.wsoft.net/Index/Catalog61/215.aspx

这种大数据量无非是
1.用时间换空间
2.用空间换时间
这两种方法来优化

把你的库三个字段都建成索引字段 .
zhbr 2008-05-30
  • 打赏
  • 举报
回复
你的问题是同级节点多 ,可以考虑顶级节点分页。如初始时第一页加载200行。
用户找到节点后再用ajax 展开。
ruanchao 2008-05-30
  • 打赏
  • 举报
回复
AJAX
weiyue_net 2008-05-30
  • 打赏
  • 举报
回复

如果用在网页上就别费劲了,ASP.NET 有一个Response TimeOut 限制,不等你把5000传完,就会断在那里。
通常UI设计会要求加一个搜索功能,每回返回一个小的树,显示最接近20个节点,有时还可以把最后的节点变成动态节点,表示“更多..."

或者将树按深度断开,例如 国家-省-公司-部门-经理-人员
可以变成左右两个树:

国家-省-公司-部门 和 部门-经理-人员





46539492 2008-05-30
  • 打赏
  • 举报
回复
关键是楼主为什么要加载哪么多的数据,不能过滤筛选一下再异步吗?
yap111 2008-05-30
  • 打赏
  • 举报
回复
我倒,多了个0了,o(∩_∩)o...哈哈
yap111 2008-05-30
  • 打赏
  • 举报
回复
算法优化。
你的loadtree是不是创建了4000*4=160000个String对象啊?
ShadowInWind 2008-05-30
  • 打赏
  • 举报
回复
还有,根据父节点分视图,这样select直接从不同的视图里取,速度又快一点
ShadowInWind 2008-05-30
  • 打赏
  • 举报
回复
手工写树吧,直接绑进treeview不太现实.开始只给根节点,然后根据他点击的节点再去和数据库交互,虽然交互多了点,但是应该比一次绑定要好很多.
Jinglecat 2008-05-30
  • 打赏
  • 举报
回复
AJAX 即时加载吧

不过,无论我都会想办法过滤一些当前用户不关心的节点的

噢噢,让一个用户维护一个具有 5K+ 节点的树,他不疯掉才怪

不是权限吗? 没有进行权限分组吗?
LGame 2008-05-30
  • 打赏
  • 举报
回复
学習
HBJMSHOP 2008-05-30
  • 打赏
  • 举报
回复
干什么用啊,这么多节点,
无论如何,关注下...........
Ny-6000 2008-05-30
  • 打赏
  • 举报
回复
能否考虑,

同级下翻页显示呢?
编程有钱人了 2008-05-30
  • 打赏
  • 举报
回复
谁能给段代码
按 逐级展开,逐级添加数据(21L)的方法
live_7sky 2008-05-30
  • 打赏
  • 举报
回复
树的用途有2部分,1 是维护,2 是当作权限树
======================================


按照 楼上的 方法 做权限就麻烦了,如何 知道 你选择了 哪些 节点
=====================================
mengfeihui 2008-05-30
  • 打赏
  • 举报
回复
做到三级节点的类似问题,
逐级展开,逐级添加数据,
但是当数据很多的那一层 只能优化数据库
数据太多 速度慢是很必然的。。。。。
编程有钱人了 2008-05-30
  • 打赏
  • 举报
回复
我也发了关于这类帖子
treeview怎么样使节点在expand时才动态加载

方法是等你想展开的那个结点要展开时候只显示他的下一级结点,不展开的结点不进行数据绑定,这样在页面加载的时候就不要把数据库中全部数据都读出来了(尤其是当数据库很大时候这个方法很有效),

绑你狂顶
加载更多回复(19)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧