w_main中有一个treeview控件,w_main的open事件中调用函数递归向树中插入treeviewitem。
打开w_main的速度很慢,效率很低,树中的treeviewitem数量越多就越慢,当数量只有400个的时候,w_main的打开速度都差不多要10秒了,可是数量还是远未达到最大的时候。
两个表记录整棵树结构:
t_目录
目录id 父目录id 目录名称
t_文件
文件id 目录id 文件名称
什么算法可以快速初始化一棵树呢?
------解决方案--------------------
open时只生成1级的,当点击1级时在生成2级,依次类推
------解决方案--------------------
楼上的办法是一个,另外还可以采用异步的方式生成树,不要把工作量全压在open事件里面,而是采用post的调用方式,用自定义函数(事件)来实现
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
------解决方案--------------------
open事件中只生成一级目录树
子目录树的生成可以放在itempopulate事件中生成
至于是否显示加号,可以根据你的条件判断该目录树是否达到了最大层,如果达到则tv_item.children = false,否则为true
------解决方案--------------------
一般是两种方法,可以提高窗口打开的速度。
1 lazy法,就是当用户用到某个树节点的时候,才去构造它的子节点,这样不用的节点根本不需要创建,而窗口打开时,只需要建立根节点即可,生成子树的代码可以写在itempopulate中,请参考worldly_wind(尘世的风)、liuin(^_^ Double Z ^_^) 两位的方法。
2 异步法,就是在窗口open的时候不创建树节点,而是发送一个消息,等窗口打开以后,再另外有一个事件来创建。这样的好处是窗口打开的快,编程也简单,只是窗口打开以后,程序会有一段时间没有相应,因为把窗口打开前的这段时间移到后面来了。具体方法是:自定义一个事件:ue_treeviewinit,把创建树的代码全部写到这个事件里面,然后在open中写this.post event ue_treeviewinit() 。