我最近在做一个系统,里面有一个模块是要显示公墓的占用情况(有12000个公墓),于是我采用了动态生成控件的办法(如果占用就显示图片1,如果没占用就显示图片2),并且还加了进度条,虽然可以实现,但是速度太慢了,大约在前面的1000里只用1分钟,但后面的简直慢得不行啦,有2小时之久。   问题一:有什么办法可使速度加快?。   问题二:如何采取多线程的方法实现?   问题三:如果不用动态生成控件的办法,还能用什么办法?

解决方案 »

  1.   

    可以用image的canves来画,动太控件方式肯定慢,用画布画,比动态生成控件至少要快一万倍,12000个公墓最多5秒就能画完,还可以实现漫游,我画地下管线就是用这种方式
      

  2.   

    楼主,我们是同行啊,不知你是哪个公司的,我原来是用C++Builder搞定的,不是很复杂的。也是动态创建控件。
      

  3.   

    记得当时我记得是用一个stringGrid上自己draw图片,注意图片不要太大,否则你的机器就吃不消了。还有我记得公墓是按区、排来划分的,你可以左边一个listview或Treeview,点左边时再显示一排的信息,在右边的stringGrid上Draw,一排最多也就是几百个,你没有必要把两万个都显示出来吧,我记得我做时开始是显示所有的墓位,后来速度太慢,得等20秒左右,后来显示一排,1秒钟也用不到。就这些了,自己的细节问题你自己来搞定吧,
      

  4.   

    使用Virtual技术,用户不见的就不用显示
    就是说没必要两万个都显示出来
    显示器不大,只计算要是显示的部分类似VirtualTree和VirtualList技术,网上找例子去研究了
      

  5.   

    楼上各位已经说得够多了,注意:
    1、不要需要显示20000条信息就动态创建20000个控件,机器肯定吃不消
    2、适当利用缓冲的办法
    3、多线程也可考虑,比如要画1000个,用两个线程,每个负责500,但不会省太多心
    4、Canvas肯定比动态控件快
    我只随便说说,楼主自己斟酌
    如有不妥之处,各位大侠斧正!!!