收起时,删除掉子项(必须留一个才会有可以点击展开的那个button),展开时插入大量子项目。
当项目多时,几千,上万个,速度很慢。点了button,过很久才展开。
就算用SetRedraw(FALSE)...SetRedraw(TRUE)也一样。
什么原因,是插入元素慢了,还是SetRedraw(TRUE)后,树的显示更新慢了。慢的没法用。同样多的元素。regedit.exe的树是一瞬间展开,收起,看不出有延迟,为什么?

解决方案 »

  1.   

    TreeView实现上的trick,InsertItem (TVI_FIRST)会比TVI_LAST有更好的效率
    因为InsertItem TVI_LAST每次都需要遍历到最后一个子节点另除了SetRedraw(FALSE)...SetRedraw(TRUE)外,文本用LPSTR_TEXTCALLBACK 通过消息的方式显示文本也会减少插入时的文本拷贝操作
      

  2.   

    regedit.exe怎么做的不清楚,线程+加载某个节点下的一层节点,就看不到界面假死。
      

  3.   

    我谈的是树控件本身太慢,如果说windows xp的树都那样,但regedit.exe为什么又那么快,所以没有搞懂。
    刚才测试了一下:弄了几个DWORD变量,用GetTickCount保存当时的时间。发现,约12000个项目,删除子项时间为0,插入12000个项目耗时1860ms。TVN_ITEMEXPANDING执行结束到TVN_ITEMEXPANDED函数被执行,耗时5781ms。所以感觉树慢,就是因为有这5781ms的等待时间,如何解决?