200高分提问,如何快速创建N多控件
如何在1秒之内,在800*600的panel上,创建并显示40*50=2000个PictureBox.
每个都不大,10px*12px就够了,但是每个都是控件,因为要移动,变色,数据保存等等。
gdi+画图是可以很快,但是每个单独的图片就没有以上功能了。
1秒可能难了一点,那就2秒吧
如何在1秒之内,在800*600的panel上,创建并显示40*50=2000个PictureBox.
每个都不大,10px*12px就够了,但是每个都是控件,因为要移动,变色,数据保存等等。
gdi+画图是可以很快,但是每个单独的图片就没有以上功能了。
1秒可能难了一点,那就2秒吧
解决方案 »
- 根据已存在的文件生成PL/SQL脚本的工具怎么写?
- 要调用endgame这个方法再哪调用了?是在哪个事件里吗?
- C# 读取二进制文件转换成文本文件
- C#中使用UDP进行收发消息,貌似没用到Socket,想问问UDP跟Socket有关系吗?
- C#中如何实现Form窗口之间的跳转
- C/S结构下如何读取pdf文件?
- 窗体的构造函数想传一个类类型的参数,为什么会报错?
- 一个极其容易的实现,但是搜索了半天还是没答案,帮忙啊!
- 一大串简单问题,希望有耐心的人能够帮我解决!!
- oracle简单问题
- 请教大家一个超难的正则表达式.
- [讨论]<%# DataBinder.Eval(Container.DataItem, "字段名">有意思的问题。
我自己就在用类似的程序
界面上的重绘总是比较耗时的
何况你还那么多
不过有办法稍微提高一些性能
比如在你2000个没有全部add进容器前
容器的visible设false
最后再true
这样避免界面上不断重绘
你说的,我都做到了。图片也是预先读到内存。再加上多线程。但还是不够快
我自己的机器可以做到5秒左右,p4 3.6+1g内存
就行了
如果非得创建那么多控件,还是考虑使用别的语言~~`
PS:由于不知道楼主到底要实现什么功能,所以,为知道上面的方法是否有效,呵呵。
可以考虑用c/c++ api gdi来实现
然后c#调用吧
把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秒