MFC 树形控件插入大量节点的速度的问题

90Runner 2014-06-19 03:31:00
我在MFC中加入了一个树形控件,并将我遍历到的文件插入到树形控件中,但是当有大量的文件时速度慢的让人无法忍受,我写了个测试程序测试了一下直接在树形控件中插入22万条数据需要花费44分钟,这么长时间是无法忍受的。不知道哪位大神能为小弟指点下该如何缩短时间啊,机器是win7,32位,4GB内存;
...全文
390 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
90Runner 2014-06-20
  • 打赏
  • 举报
回复
又做了下测试,文件分析这部分时间还是很理想的(若文件不在百万级以上),百万级以上就会相对慢些;大部分时间都花费在添加节点上面了,在就是看了下内存的使用率,内存使用率比较高,想在内存这方面做优化,不知道该怎么弄啊
小生我怕怕 2014-06-20
  • 打赏
  • 举报
回复
你可以参考资源管理的打开方式,只显示可见最上层的节点(可以多加载一级)
lis2012 2014-06-20
  • 打赏
  • 举报
回复
你可以参考资源管理的打开方式,只显示可见最上层的节点(可以多加载一级),然后打开节点的时候在继续加载其下一级数据节点
arvid_gs 2014-06-20
  • 打赏
  • 举报
回复
一种思路:(实际情况还需要根据你的场景测试) 在内存中构建数据树,在树上面,初始只展示根节点,点击某个根节点的时候从内存中读取并加载。也就是异步加载,加载和读内容都要异步。内存树的构建可以采用hash等方法,应该可以解决。
90Runner 2014-06-19
  • 打赏
  • 举报
回复
引用 6 楼 schlafenhamster 的回复:
先 不要 “右边的List Contrl 控件中显示” (, 它 要 搞成 虚拟的)
我看到过一个 你说的这种方法的例子 他是先申请了一块内存 之后再添加的 如果把申请内存去掉,速度就下来了。我现在在测试下文件分析这部分花费的时间,没有注释,没有文档这是太难找了。
schlafenhamster 2014-06-19
  • 打赏
  • 举报
回复
先 不要 “右边的List Contrl 控件中显示” (, 它 要 搞成 虚拟的)
90Runner 2014-06-19
  • 打赏
  • 举报
回复
程序就是按您说的这样,初始化的时候并不展开只把文件夹添加到左边的树型控件,当点击树形控件的节点时将文件夹中的文件添加到右边的List Contrl 控件中显示。可是我现在插入节点的时候速度还是很慢,因为是修改别的程序,写程序的人已经离开了也没有留下文档与注释。程序也不是遍历磁盘,只是打个比方。现在只能在树形控件插入节点这找突破口。 我现在想在内存这方面找突破口,对树形控件不是了解,树形控件是每次我插入一个节点就申请一小块内存吗?
fishion 2014-06-19
  • 打赏
  • 举报
回复
引用 2 楼 Paddy90 的回复:
我就是将子节点都插入到根节点下的,你的意思是只插入一个子节点剩下的做为孙子节点在我扩展的时候响应鼠标点击消息在插入?就是把一整段时间分段?可是我要是在一个文件夹下就有20万个文件,插入的时间还是慢啊。我现在想在内存这方面找突破口,对树形控件不是了解,树形控件是每次我插入一个节点就申请一小块内存吗?
或者就分段搜索吧,如一次先插入2000个,如滚动条滚动下第1000以下的,再读1000个文件进去,滚动条又滚动到下面1000条的就再读1000个数据进去。。你先看看不插入,直接遍历文件,看看需要花多少时间了。或者申请一段足够大的空间来保存文件信息,先用线程遍历搜索,搜索完再插入到树控件中。 或者,有个好一点的办法是,自己绘制树控件,用合理的数据结构保存文件名数据,设定一项的高度,然后根据滚动条的位置进行首个显示的项绘制。
fishion 2014-06-19
  • 打赏
  • 举报
回复
遇到是文件夹的,而且初始化时不打算展开的,就只插入文件夹里的第一个文件,当你要展开的时候才重新把这文件夹里的文件遍历插进去
90Runner 2014-06-19
  • 打赏
  • 举报
回复
我就是将子节点都插入到根节点下的,你的意思是只插入一个子节点剩下的做为孙子节点在我扩展的时候响应鼠标点击消息在插入?就是把一整段时间分段?可是我要是在一个文件夹下就有20万个文件,插入的时间还是慢啊。我现在想在内存这方面找突破口,对树形控件不是了解,树形控件是每次我插入一个节点就申请一小块内存吗?
schlafenhamster 2014-06-19
  • 打赏
  • 举报
回复
只插入 根节点 下 , 第一个 child 其余 在 Expanding 时 插入。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧