KiMoGiGi 技术文集

不在乎选择什么,而在乎坚持多久……

IT博客 首页 联系 聚合 管理
  185 Posts :: 14 Stories :: 48 Comments :: 0 Trackbacks
摘至: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
只有注册用户登录后才能发表评论。