结果出来了,时间主要不是费在findfirst,findnext,findclose和循环上, 而是shgetfileinfo和动态数组调整大小上,我得这段程序大概是这样: findfirst if 子目录 then 递归 or 进栈 if 文件 then begin setlength(数组); //因为不知道能找到多少文件 数组[x].filename:= SearchRec.Name; .... shgetfileinfo(....); //得到文件的类型和图标 end findnext findclose 问题是setlength和shgetfileinfo的效率低下,如何解决? 可有高手肯回答?谢谢!
win32api里也只有findfirstfile,findnextfile这样的函数,
delphi也是封装了他们,这是何故?????!!!!!
windows绝对不会用递归算法
目录1(100多文件) 目录2(100多文件) 目录3(2000左右)
堆栈非递归 1.1s 1.1s 11.3s
递归 1.2s 1.3s 9.0s
这是经过多次实验得来得,尽量排除了外界干扰,可还是让人晕倒。
:(:(:(:(:(
目录1(100多文件) 目录2(100多文件) 目录3(2000左右)
堆栈非递归 0.4s 0.4s 0.5s
递归 0.7s 0.7s 0.8s
确实递归比较慢
而是shgetfileinfo和动态数组调整大小上,我得这段程序大概是这样:
findfirst
if 子目录 then 递归 or 进栈
if 文件 then
begin
setlength(数组); //因为不知道能找到多少文件
数组[x].filename:= SearchRec.Name;
....
shgetfileinfo(....); //得到文件的类型和图标
end
findnext
findclose
问题是setlength和shgetfileinfo的效率低下,如何解决?
可有高手肯回答?谢谢!