动态创建控件

esheng 2007-04-28 11:04:36
为什么动态创建控件速度会这么慢?比如创建100个Label lbltest=new Lable();lbltest.parent=this;
...全文
640 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
b13272012771 2011-04-11
  • 打赏
  • 举报
回复
up up
key_rock 2007-05-31
  • 打赏
  • 举报
回复
瀛︿範!
Mither 2007-05-31
  • 打赏
  • 举报
回复
up
yuanzhihua520 2007-05-31
  • 打赏
  • 举报
回复
up
ismezy2002 2007-05-11
  • 打赏
  • 举报
回复
切换与刷新不作讨论,LZ只是提出创建的问题,我只讨论动态创建需要多长时间。而且动态创建控件实在是很简便,这需要权衡利弊。
ismezy2002 2007-05-11
  • 打赏
  • 举报
回复
显然5年前我就在用C#了,如果不是C#你以为我会这么回贴吗?

你说没验证过就没有发言权,不知道你验证过没有,我回贴一般都会验证的,我上面贴出的代码(可能你没看到,我再贴一遍),有兴趣的可以自己单独创建一个窗口,放一个Button上去在单击事件中加上如下代码,看看创建100个LABEL需要多久。另外可以试试删掉SuspendLayout();这一行需要多久,并且加大循环次数试试看2者的区别。
long nStart = DateTime.Now.Ticks;
SuspendLayout();
for (int i = 1; i <= 100; i++)
{
Label lb = new Label();
lb.Text = i.ToString();
lb.AutoSize = true;
lb.Location = new Point(i % 30 * 20 + 20, 20 + i / 30 * 20);

Controls.Add(lb);
}
ResumeLayout();
long nEnd = DateTime.Now.Ticks;
MessageBox.Show(((nEnd - nStart) / 10000).ToString() + "毫秒");
lovingkiss 2007-05-01
  • 打赏
  • 举报
回复
ismezy2002,没有验证过就没有发言权,5年前你用什么编制程序??
用VB别说30,100个也没有问题的!用C的话,200个也不会晃动~~
用.Net,我的计算机是1G内存,PIII3.0的,生成50个Lable需要2-4秒钟!!!
而且生成后,在窗体间切换都会闪动——屏幕刷新都会有问题,这不是代码能够解决的。

编程语言还是有很大差异的.
ismezy2002 2007-04-28
  • 打赏
  • 举报
回复
不是吧,我这里有N倍的差距,你可以单独写个程序试试,说不定是你其他地方的代码影响了速度
esheng 2007-04-28
  • 打赏
  • 举报
回复
效果不是很明显!
ismezy2002 2007-04-28
  • 打赏
  • 举报
回复
我在没有用SuspendLayout()时花了2-3秒创建LABEL

用了SuspendLayout();后只花了不到1秒,0.5秒的样子
ismezy2002 2007-04-28
  • 打赏
  • 举报
回复
SuspendLayout();
for (int i = 0; i < 100; i++)
{
Label lb = new Label();
lb.Text = i.ToString();
lb.Location = new Point(100, i * 20 + 20);
Controls.Add(lb);
}
ResumeLayout();

你试下,差别大了,N倍的差距
IoriYagami80 2007-04-28
  • 打赏
  • 举报
回复
即便你不动态创建,画100个按钮上去,速度也会让你郁闷死的。
lovingkiss 2007-04-28
  • 打赏
  • 举报
回复
没用的,.net创建多控件的时候,速度就是很慢,除非绘制控件~~
esheng 2007-04-28
  • 打赏
  • 举报
回复
不起作用呀!老兄!
ismezy2002 2007-04-28
  • 打赏
  • 举报
回复
创建控件时先临时挂起布局,SuspendLayout (),创建完后用 ResumeLayout()
caiwenqiang 2007-04-28
  • 打赏
  • 举报
回复
那如何在Web窗体上动态生成一个TextBox控件,
我写了以后,错误提示是这个动态生成的控件的属性<runat=server>没有设置,
怎样动态设置呀??
ismezy2002 2007-04-28
  • 打赏
  • 举报
回复
我在5年前就试过了,在一个界面上用TEXTBOX拼一个表格,整个界面上有100+个TEXTBOX,那时还是PIII 500的CPU 256MB内存,生成界面也就2秒左右,难道这也算慢?如果用现在的配置100个控件根本就是0.5秒以内的事 。不知道大家有没测试过,控件的加载肯定是很快的。别说你们用的是PII
ismezy2002 2007-04-28
  • 打赏
  • 举报
回复
控件越多越明显,我测试了500个LABEL,如果不挂起布局,需要10+秒,如果挂起布局只需2秒不到。100个LABEL在我电脑上根本就是一闪而过,用不上半秒
lovingkiss 2007-04-28
  • 打赏
  • 举报
回复
差距肯定会有的——但是一旦多于30左右之后,效果就不是很明显了,太慢的

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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