怎样才能提高速度(150分)

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

lizheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我将从光盘上查到的文件存在数据库中,
然后用TreeView显示出来,
但是如果在程序启动时将数据库中的文件
加载到TreeView上的话,程序的启动速度会很慢;
而如果在程序运行其动态的向TreeView加在的话,
即在用户点击TreeView的'+'时(用户想展开文件夹时),
再向TreeView中加在的话,如果此文件夹下有较多的内容,
展开仍需较长时间.

请问各位打下有何办法可以提高速度.
 
在程序启动时你可以先把第一级Treenode生成,然后在程序运行过程中动态把
其他的子项生成,为了使用户感觉不到可以作在线程中。
 
但这个程序的大部分操作都与数据库有关,
如果我的线程正在运行,
动态的生成其中一个文件夹的子项,
而这时用户想打开另外一个文件夹(还未生成子项),
或者要查询某个文件等等,
则需要暂停线程,
主线程读取同一个数据库,生成子项,
否则会起冲突.然后启动线程,
这样现成一遍一遍的启动,我觉得会影响效率的.
而且每次暂停线程,都要保存现在所处数据库中的位置,
会很麻烦而且出错率也许会很高.
 
with TreeView do
begin
BeginUpdate;
...
EndUpdate;
end;
 
我个人认为,如果数量太大,最好不要用TtreeView,这样会很慢。但用
TDbtreeview就会快一点,但不会快很多,除非你有好的算法。
 
我有一个笨办法,把treeview的内容存入一个文本文件,在oncreate事件中加载:
TreeView1.LoadFromFile('treenodes.nds');
在关闭时保存:
Treeview1.SaveToFile('Treenodes.nds');
 
请问你到底有多少条记录,居然会慢的要考虑这么多问题呢?
 
我曾用到 TListView , 打开了 16500 条记录
后来发现速度慢不是 TListView 造成的,而是读数据库慢。
所以你可以在文件倒入数据库后,根据需要生成一个专门用于建 Tree 的表或文件
或流什么的,就象王安鹏说的,应该就不会慢
 
我以前也用过TREEVIEW,结果慢死了,然后被客户骂了个半死
:-(
 
这么多数据
只能一层一层的生成,
就是用户点击后,
再新生成该点击目标的子项
 
象微软的资源管理器一样,先视情况打开2到3层,
等用户要继续打开某个结点时,再打开这个结点
下的2 到3层,这样,速度问题就可以解决了。
 
多人接受答案了。
 
后退
顶部