我用了Explorer那么久,都没发现:打开它后,它就使劲的全部读完文件再Show出来

解决方案 »

  1.   

    还有个大问题,为什么windows自带的查找那么快,他到底是怎么做的?
    win32api里也只有findfirstfile,findnextfile这样的函数,
    delphi也是封装了他们,这是何故?????!!!!!
      

  2.   

    可以肯定的是
    windows绝对不会用递归算法
      

  3.   

    我把函数改为 堆栈+非递归,但速度好像下降了实测:
            目录1(100多文件) 目录2(100多文件)  目录3(2000左右)
    堆栈非递归   1.1s               1.1s               11.3s
    递归         1.2s               1.3s               9.0s
    这是经过多次实验得来得,尽量排除了外界干扰,可还是让人晕倒。
    :(:(:(:(:(
      

  4.   

    又作了几个实验:(遍历文件时间)
              目录1(100多文件) 目录2(100多文件)  目录3(2000左右)
    堆栈非递归    0.4s              0.4s              0.5s
    递归          0.7s              0.7s              0.8s
    确实递归比较慢
      

  5.   

    结果出来了,时间主要不是费在findfirst,findnext,findclose和循环上,
    而是shgetfileinfo和动态数组调整大小上,我得这段程序大概是这样:
    findfirst
    if 子目录 then 递归 or 进栈
    if 文件 then
      begin
        setlength(数组); //因为不知道能找到多少文件
        数组[x].filename:= SearchRec.Name;
        ....
        shgetfileinfo(....);  //得到文件的类型和图标
      end
    findnext
    findclose
    问题是setlength和shgetfileinfo的效率低下,如何解决?
    可有高手肯回答?谢谢!