程序执行效率问题,非高手莫进 我没有说清楚,ID是此记录的标记,ParentDirID是此记录的父亲记录的标记,根的父亲记录为-1 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在这里我请几个建议,你看可以接受哪种:1. 你在增加记录的过程中,TTreeView会不断的刷新数据画面,从而造成速度奇慢,你把Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr); 这一句放到最后试试2. 如果上面的还是太慢,那么,慢就慢一点,在你子程序的入口前加入: Application.ProcessMessages;(或者在循环中设置每30个循环执行一次) 让用户在加入期间还可以做别的事。3. 如果方法2 不行,那么可以: 1)先把第一级结点加入(这非常快) 2) 等用户点展开某个结点时,再加入此结点的子结点(这也非常快) 3) 对子结点多的地方,可以每加入几个(如50个)结点执行一次:Application.ProcessMessages; 补充1 即: BuildTree(FNode,DirList); Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr); 你这个算法的复杂度是O(n*n)应该有办法改成O(n) 我好好想想. 试试用:TreeView1.Items.BeginUpdate;//你的代码TreeView1.Items.EndUpdate; 如果有很多条记录,一般的做法不是把它们一次性全部加进TreeView,而是在程序启动时先加一层,在Expand时候再Build下一层。 谢谢各位大侠的援手,可是树根都没有形成,怎么能先生成树枝叶呢?BuildTree(FNode,DirList); Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);这样执行能通过吗?如果这样行,那BuildTree过程中的Pnode参数初始调用时该取何值呢? format运用 在线求助 <<<请问如何用视图更新多个关表 对Devexpress公司控件(cxXXXX控件)熟悉的请进来!!!!! com+的问题--是否可以采用这样一种对象系统? 如何实现TWebBrowser的滚屏功能?gz者有份.100分 如何在 delphi中十进制数的每一位变成二进制然后进行异或 郎之间,穷人拿分! 如何判断对象是属于某一类? 这个问题好难呀 怎样获得开始菜单中某一选项的句柄? rh(有花须酌酒,无月不登楼),怎么该无可显示
1. 你在增加记录的过程中,TTreeView会不断的刷新数据画面,从而造成速度奇慢,你把Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
这一句放到最后试试
2. 如果上面的还是太慢,那么,慢就慢一点,在你子程序的入口前加入:
Application.ProcessMessages;(或者在循环中设置每30个循环执行一次)
让用户在加入期间还可以做别的事。
3. 如果方法2 不行,那么可以:
1)先把第一级结点加入(这非常快)
2) 等用户点展开某个结点时,再加入此结点的子结点(这也非常快)
3) 对子结点多的地方,可以每加入几个(如50个)结点执行一次:Application.ProcessMessages;
即:
BuildTree(FNode,DirList);
Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
应该有办法改成O(n)
我好好想想.
TreeView1.Items.BeginUpdate;
//你的代码
TreeView1.Items.EndUpdate;
而是在程序启动时先加一层,在Expand时候再Build下一层。
BuildTree(FNode,DirList);
Root:=TreeView1.Items.AddChildObject(Fnode,'根',ptr);
这样执行能通过吗?如果这样行,那BuildTree过程中的Pnode参数初始调用时该取何值呢?