200高分提问,如何快速创建N多控件
如何在1秒之内,在800*600的panel上,创建并显示40*50=2000个PictureBox.
每个都不大,10px*12px就够了,但是每个都是控件,因为要移动,变色,数据保存等等。
gdi+画图是可以很快,但是每个单独的图片就没有以上功能了。
1秒可能难了一点,那就2秒吧

解决方案 »

  1.   

    原帖:http://community.csdn.net/Expert/TopicView3.asp?id=5288845
      

  2.   

    我给楼主提个思路,可能会有帮助吧. 创建一个自己继承的PictureBox,然后将该控件的位置,大小,所载数据都独立出来,在对某个控件操作或者显示的时候绑定数据.建议楼主看一下设计模式里面的原型模式,或许或有帮助.
      

  3.   

    一辆不可能啊
    我自己就在用类似的程序
    界面上的重绘总是比较耗时的
    何况你还那么多
    不过有办法稍微提高一些性能
    比如在你2000个没有全部add进容器前
    容器的visible设false
    最后再true
    这样避免界面上不断重绘
      

  4.   

    如果是要PictureBox的话 就只能靠电脑速度了
      

  5.   

    sunrobust(诚以待人严以律己)
    你说的,我都做到了。图片也是预先读到内存。再加上多线程。但还是不够快
    我自己的机器可以做到5秒左右,p4 3.6+1g内存
      

  6.   

    你做一个包含2000个图片格子的flash
    就行了
      

  7.   

    不太可能吧,图片本来就大,系统哪有那么快啊,VISTA也估计抗不住
      

  8.   

    先把控件全部建好了再加图片...这样从语意上讲是算作加快建立了吧?.net本来就是牺牲性能提高设计的~~框架设计好了才是重要的~~
    如果非得创建那么多控件,还是考虑使用别的语言~~`
      

  9.   

    速度测试:1、在800*600的panel上,创建并显示一个PictureBox.400px*600px的,显示一张图片,看看速度如何。2、如果速度很快的话,说明n多控件很影响速度,那么就要减少控件的数量。3、可以在800*600的panel上,创建并显示40个PictureBox.10px*600px的。测试速度。4、然后想办法 吧若干个 10px*12px 合并显示。
    PS:由于不知道楼主到底要实现什么功能,所以,为知道上面的方法是否有效,呵呵。
      

  10.   

    实在是性能跟不上 
    可以考虑用c/c++ api gdi来实现
    然后c#调用吧
      

  11.   

    提一个思路。
    把2000个PictureBox添加到1个Panel控件中去,有两个地方是比较花时间的:
    一、PictureBox new 的时候
        既然必须用控件,这里就不再讨论占用内存和是否用其他代替了二、把PictureBox添加到Panel的时候
        1.普通的做法是用Panel1.Controls.Add(PictureBox对象)循环添加,这里有一个问题,每添加一次Panel都会刷新一次重画控件,所以在循环开始前,先把Panel的Visable属性设为false,循环结束后再设为true,笔者测试时,设为false前是2.5秒左右,设为false后可以缩短为2.0几秒.
        2.更好一点的方法是用Panel1.Controls.AddRange(PictureBox[]对象的数组),先实例化一个PictureBox的数组,然后用AddRange一次性添加进去,时间从2.0秒缩短为1.9秒
      

  12.   

    2.更好一点的方法是用Panel1.Controls.AddRange(PictureBox[]对象的数组),先实例化一个PictureBox的数组,然后用AddRange一次性添加进去,时间从2.0秒缩短为1.9秒实例化可以提到前面做,看只是addrange要多少时间,太多控件了,时间不会少
      

  13.   

    启动的时候就创建,然后放在内存里,用的时候show出来。从来不关闭,写个Reset函数来调用Initialize,重置每个图片。记得调用GC.Collect