动态创建控件 为什么动态创建控件速度会这么慢?比如创建100个Label lbltest=new Lable();lbltest.parent=this; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 创建控件时先临时挂起布局,SuspendLayout (),创建完后用 ResumeLayout() 没用的,.net创建多控件的时候,速度就是很慢,除非绘制控件~~ 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倍的差距 我在没有用SuspendLayout()时花了2-3秒创建LABEL用了SuspendLayout();后只花了不到1秒,0.5秒的样子 控件越多越明显,我测试了500个LABEL,如果不挂起布局,需要10+秒,如果挂起布局只需2秒不到。100个LABEL在我电脑上根本就是一闪而过,用不上半秒 我在5年前就试过了,在一个界面上用TEXTBOX拼一个表格,整个界面上有100+个TEXTBOX,那时还是PIII 500的CPU 256MB内存,生成界面也就2秒左右,难道这也算慢?如果用现在的配置100个控件根本就是0.5秒以内的事 。不知道大家有没测试过,控件的加载肯定是很快的。别说你们用的是PII 那如何在Web窗体上动态生成一个TextBox控件,我写了以后,错误提示是这个动态生成的控件的属性<runat=server>没有设置,怎样动态设置呀?? ismezy2002,没有验证过就没有发言权,5年前你用什么编制程序??用VB别说30,100个也没有问题的!用C的话,200个也不会晃动~~用.Net,我的计算机是1G内存,PIII3.0的,生成50个Lable需要2-4秒钟!!!而且生成后,在窗体间切换都会闪动——屏幕刷新都会有问题,这不是代码能够解决的。编程语言还是有很大差异的. 显然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() + "毫秒"); 小问题。。欢迎高手给点建议。。 asp.net中用js如何实现服务器空间dropdownlist的selectIndexChanged事件? 关于wcf返回二维数组的问题 一个算法的问题,怎么查出数组1和数组2中,有多少个相同的数??动态静态数组都行! 请教一下SqlDataReader的小问题 TreeView提交后怎样防止刷新,百分相送!请高手帮忙! 《有关数据库存表的问题》 这样的一个小功能该如何实现呢?我用的c# C#浏览文件夹 我个人用C#写的一个播放器“泊威播放器 0.3” C#-Socket通信如何实现? StreamReader读取字符串
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倍的差距
我写了以后,错误提示是这个动态生成的控件的属性<runat=server>没有设置,
怎样动态设置呀??
用VB别说30,100个也没有问题的!用C的话,200个也不会晃动~~
用.Net,我的计算机是1G内存,PIII3.0的,生成50个Lable需要2-4秒钟!!!
而且生成后,在窗体间切换都会闪动——屏幕刷新都会有问题,这不是代码能够解决的。编程语言还是有很大差异的.
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() + "毫秒");