KiMoGiGi 技术文集
不在乎选择什么,而在乎坚持多久……
IT博客
首页
联系
聚合
管理
185 Posts :: 14 Stories :: 48 Comments :: 0 Trackbacks
公告
KiMoGiGi 技术文集
注:本Blog技术文章
除特别说明外
全部均来源Web和转载
最近正在看的
(图片来源
China-Pub
):
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(10)
给我留言
查看公开留言
查看私人留言
随笔分类
(219)
AJAX.NET(5)
ASP.NET(38)
Basic(7)
C# / Winforms(64)
Enterprise Library(3)
Java(1)
JavaScript(35)
Python(4)
Web小技巧(19)
WPF/SilverLight(4)
工具插件(6)
数据库相关(7)
经验之谈(24)
网络编程(2)
随笔档案
(185)
2011年3月 (1)
2010年11月 (1)
2010年8月 (1)
2010年6月 (2)
2009年10月 (1)
2009年9月 (9)
2009年7月 (1)
2009年5月 (2)
2009年3月 (6)
2009年2月 (3)
2009年1月 (7)
2008年12月 (6)
2008年11月 (5)
2008年10月 (3)
2008年9月 (1)
2008年8月 (5)
2008年7月 (10)
2008年6月 (9)
2008年5月 (6)
2008年4月 (5)
2008年3月 (6)
2008年2月 (1)
2008年1月 (4)
2007年12月 (11)
2007年11月 (11)
2007年10月 (2)
2007年8月 (1)
2007年4月 (4)
2007年3月 (11)
2007年2月 (3)
2007年1月 (10)
2006年12月 (12)
2006年11月 (6)
2006年10月 (3)
2006年8月 (3)
2006年7月 (5)
2006年6月 (8)
文章分类
(25)
ASP.NET(8)
Basic Knowledge(1)
C#(4)
JavaScript
Web设计
开源框架 - NHibernate
数据库相关
经验之谈
英文文章翻译(12)
文章档案
(14)
2008年8月 (1)
2008年6月 (2)
2007年12月 (4)
2007年11月 (7)
收藏夹
JavaScript
Friend 's Blog
My Step
映画记录
技术崇拜
A JavaScript Fancier
Dflying
dudu
First we try, then we trust
lifesinger
淘宝网UED部-Web前端
TerryLee's Tech Space
听棠.NET
周爱民
职业生涯顾问Leo的专栏
鸟食轩
技術網站
C# Corner
codeplex
CSDN
博客園
数据结构
點部落
搜索
winform下提高control在UI中的响应速度
摘至:
http://www.cnblogs.com/juqiang/archive/2008/09/28/41871.html
其实有很多种办法,先列出第一种性能最差,也是我们经常写的代码:
private
int
count
=
10000
;
private
void
button1_Click(
object
sender, System.EventArgs e)
{
long
l1
=
System.DateTime.Now.Ticks;
listBox1.Items.Clear();
for
(
int
i
=
0
;i
<
count;i
++
)listBox1.Items.Add(i);
long
l2
=
System.DateTime.Now.Ticks;
MessageBox.Show((l2
-
l1).ToString());
}
这是我以前在cbuilder中经常使用的方式:
long
l1
=
System.DateTime.Now.Ticks;
listBox1.Enabled
=
false
;
listBox1.Visible
=
false
;
listBox1.Items.Clear();
for
(
int
i
=
0
;i
<
count;i
++
)listBox1.Items.Add(i);
listBox1.Enabled
=
true
;
listBox1.Visible
=
true
;
long
l2
=
System.DateTime.Now.Ticks;
MessageBox.Show((l2
-
l1).ToString());
这种方式,值得注意的是,如果你没有设置Visible=false,效率和第一种差不多。
这是.net下推荐的方式:
long
l1
=
System.DateTime.Now.Ticks;
listBox1.BeginUpdate();
listBox1.Items.Clear();
for
(
int
i
=
0
;i
<
count;i
++
)listBox1.Items.Add(i);
listBox1.EndUpdate();
long
l2
=
System.DateTime.Now.Ticks;
MessageBox.Show((l2
-
l1).ToString());
对于如上面简单的control,大家可以测试一下,第一和最后一种,差2、3倍的时间是没有问题的。而如果我们使用诸如datagrid这种control,再如果我们的每个cell中作了不少事件的handle,那么,效率是非常低的。常见的现象,你看见datagrid上的cell光标,四处乱跑。
而BeginUpdate/EndUpdate,在这个范围段内,不响应任何事件(此处我也存疑,呵呵)。如果没有event的handle,那么慢的唯一原因是UI需要不停的刷新。所以第二种的方式下,让它disable/invisible,也是可以解决这个问题的。
posted on 2008-11-10 23:09
KiMoGiGi
阅读(722)
评论(0)
编辑
收藏
引用
所属分类:
C# / Winforms
只有注册用户
登录
后才能发表评论。
Powered by:
IT博客
Copyright © KiMoGiGi