如何改进TreeView和ListView的效率(50分)

  • 主题发起人 主题发起人 LiChaoHui
  • 开始时间 开始时间
L

LiChaoHui

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi中的TreeView和ListView虽然用的是
操作系统提供的,但是插入和删除节点的速度却比
VC慢很多,插入和删除大量节点时等待的时间太长

如果谁能改进这一方面的性能,那可是太好了,
我测试过,直接使用API函数操作节点,速度可以达到
VC的速度,
 
在开始时候用BeginUpdate,结束时用EndUpdate
 

Teeview1.Items.BeginUpdate
//中间进行节点的操作..
//
Treeview1.Items.EndUpdate
 
呵呵,来晚了
 
可以用第三方控件Virtual TreeView和Virtual ListView,你到google上搜一下。
 
那就用VC的不就可以了,反正可以装,我一直都用VC中的
 
我已经使用BeginUpdat优化过了,我就是说的优化过依然还是太慢,
尤其是窗口关闭时删除大量节点,很慢
第三方的控件我也找了一些,但和Delphi中的一样,都是慢
如果要找非基于Windows Controls实现的,控件太大,速度也不见得快呀

至于Virtual ListView,需要提供数据源,比较麻烦
Virtual TreeView我还没有见过
 
看过了Virtual TreeView太过于花哨,控件太大
我仅仅需要速度上的改善,接近于VC的就可以了
 
既然用 API能达到VC的速度,不就可以了。
但你可以把不用API的代码贴出来,看看能不能改进
 
直接用API操作TreeView控件,代码太麻烦,
必须自己重新定义一个TreeView才行,开销太大
TreeView的很多先进特性都不方便用了
我的代码如下,看谁能优化,第一次还可以,虽然比VC的还慢
但到10次之后,就难以忍受了,会超过10秒钟以上

var
m: Integer;
t1, t2: Integer;
begin
t1 := GetTickCount;
SendMessage(ListView1.Handle, WM_SETREDRAW, 0, 0);
ListView1.Items.BeginUpdate;
for m := 1 to 2000 do
with ListView1.Items.Add do
begin
Caption := 'Item'+Format('%.4d', [m]);
SubItems.Text := Format('%5d'#13'%5d'#13'%.5d',
[Random(3000), Random(3000), Random(3000)]);
end;
ListView1.Items.EndUpdate;
SendMessage(ListView1.Handle, WM_SETREDRAW, 1, 0);
t2 := GetTickCount;
ShowMessage('ElapseTime: '+IntToStr(t2- t1));
 
我也找到了插入速度比较快的控件,但不是免费软件
 
多人接受答案了。
 
后退
顶部