zoukankan      html  css  js  c++  java
  • winform下提高control在UI中的响应速度

    其实有很多种办法,先列出第一种性能最差,也是我们经常写的代码:
    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,也是可以解决这个问题的。

    本来不想写的,看见灵感老大的第17(还是18了?)感悟,呵呵,我就不嫌这玩意土了。
    希望对大家有所帮助。
  • 相关阅读:
    CUBRID学习笔记 4 端口和win7下连接数据库cubrid教程
    CUBRID学习笔记 3 net连接数据库并使用cubrid教程示例
    CUBRID学习笔记 2 安装教程
    CUBRID学习笔记 1 简介 cubrid教程
    vs无法打开项目的解决方案
    迷你sql profile,给缺少sql跟踪的朋友们
    EntityFramework 开始小试
    网站安全扫描工具--Netsparker的使用
    ServiceStack.OrmLite 笔记10-group having 分页orderby等
    pyqt5 笔记(四)cx_Freeze 实现代码打包exe
  • 原文地址:https://www.cnblogs.com/juqiang/p/41871.html
Copyright © 2011-2022 走看看