delphi7读取数据库用treeview显示,速度太慢,高手帮忙优化

代码:
数据库字段: nodeid,title,parentid,turn
procedure TForm1.ReadTree(Node:TTreeNode;nid:Integer);
var
sql:string;
tNode:TTreeNode;
id:integer;
ado:TADOQuery;
begin
sql:=Format('select * from ttree where parentid=%d order by turn',[nid]);
ado:=TADOQuery.Create(nil);
ado.Connection:=ADOConnection1;
ado.SQL.Clear;
ado.SQL.Add(sql);
ado.Open;
ado.First;

while not ado.Eof do
begin
     id:= ado.Fields[0].AsInteger;
     tnode:=TreeView1.Items.AddChild(Node,ado.Fields[1].AsString ) ;
     ReadTree(tNode,id);
     ado.Next;
end;
ado.Close;
ado.Free;

end;
procedure TForm1.AddRoot;
var
ado:tadoquery;
node:TTreeNode;
begin
ado:=TADOQuery.Create(self);
ado.Connection:=ADOConnection1;
ado.SQL.Clear;
ado.SQL.Add('select * from ttree where parentid=0');
ado.Open;
while not ado.Eof do
begin
node:=TreeView1.Items.AddChild(nil,ado.Fields[1].AsString );
ReadTree(node,ado.Fields[0].AsInteger );
ado.Next;
end;
ado.Close;
ado.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
AddRoot;
end;
启动速度很慢,CPU也100%,有办法优化或其他的方法实现吗??

懒惰加载,只加载当前层和下一层(以便让下一层左侧出现加号)。在treeexpend事件中加载再下一层。windows资源管理器就是这么做的。

Treeview的目录树比较,可以分步读入。首先读入根目录,后续再读入子目录。

但是在使用中,树的数据一般,不会太大。处理的办法是一次性读入。

为了加快速度,在设计时,可以分层读入。如果层次少,可以这样,诗篇的速度就比较快。

但是,在实际中,本人是将数据读入内在,再分层创建树。

http://bbs.csdn.net/topics/380239317
这是我写的一个资源管理器的例子,就用到了我说的思路。C#的,但是你可以借鉴下。