• paip.提升性能---.net listbox 使用BeginUpdate与EndUpdate


    paip.提升性能---.net listbox 使用BeginUpdate与EndUpdate 




    作者Attilax ,  EMAIL:1466519819@qq.com 
     




    使用默认的  this.listBox1.Items.Add(line);这种方式




    结果如下:
    1千行数据:1秒
    1万行:   3.5秒
    10万行:   40秒




    查找资料说,使用使用BeginUpdate与EndUpdate 可提高性能。
    于是使用了BeginUpdate与EndUpdate 


    结果如下:


    结果如下:
    1千行数据:0.5秒
    1万行:   4秒
    10万行:   44秒




     结论:
    --------
    使用BeginUpdate与EndUpdate 在几千行数量级时,确实可提高性能无一倍……
    但在一万级以及十万级数据时,甚至比默认方式更慢个10%……








    ---------------主要源码如下:-----------






          int loadRecNum = 0;
            long curtime = 0;
            private void button1_Click(object sender, EventArgs e)
            {
                OpenFileDialog openFileDlg = new OpenFileDialog();
                openFileDlg.Title = "请选择:";
                openFileDlg.Filter = "*.*|*.*";
                openFileDlg.ShowDialog();
                if (openFileDlg.CheckFileExists)
                {
                    if (openFileDlg.FileName.Equals(""))
                        return;
                    String pathYZM = openFileDlg.FileName;




                    //c452308 add txt2list
                    Thread t = new Thread(new ParameterizedThreadStart(
                   delegate(object obj)
                   {
                       loadRecNum = 0;
                       curtime = DateTime.Now.Ticks;


                       //c45  big txt


                       //Pass the file path and file name to the StreamReader constructor
                       StreamReader sr = new StreamReader(pathYZM);


                       //Read the first line of text
                       string line = sr.ReadLine();


                       //Continue to read until you reach end of file
                       int n = 0;
                       //  listBox1.Visible = false;


                       listBox1.Invoke(new EventHandler(delegate
                      {
                          this.listBox1.BeginUpdate();
                      }));
                       
                       Form1 fm = (Form1)obj;
                       while (line != null)
                       {
                         //  Thread.Sleep(5);
                      //     Console.WriteLine("--" + n.ToString() + ":" + line);
                           n++;
                        
                           //write the lie to console window
                           if (n % 1000 == 0)
                           {
                               Console.WriteLine("--" + n.ToString() + ":" + line);
                               //listBox1.Invoke(new EventHandler(delegate
                               //{
                               //    listBox1.EndUpdate();
                               //   // this.listBox1.BeginUpdate();
                               //}));
                            
                           }


                           add2List(line);


                           int readNum = this.settingForm.getReadNum();
                           if (n >= readNum)
                               break;
                           //Read the next line
                           line = sr.ReadLine();
                           //if(line==null)
                           //    listBox1.Invoke(new EventHandler(delegate
                           //    {
                           //        listBox1.EndUpdate();
                                   
                           //    }));


                       }
                       //  listBox1.EndUpdate();
                       //   listBox1.Visible = true;
                       //close the file
                       sr.Close();


                       ListboxEndUpdate();
                       ////c45




                       loadRecNum++;
                       label8.Invoke(new EventHandler(delegate
                       {
                           label8.Text = "已经加载:" + loadRecNum.ToString();


                       }));


                       long nowtime = DateTime.Now.Ticks;
                       float span = (float)(((float)(nowtime - curtime)) / ((float)10000000));
                       int spanint = (int)span;
                       label9.Invoke(new EventHandler(delegate
                       {
                           label9.Text = "用  时:" + span.ToString() + "秒";


                       }));
                       
                   }


                   ));
                    t.Name = " --start txt2list thread";
                    t.IsBackground = true;
                    t.Start(this);




                   


     
                }






            }


            private void ListboxEndUpdate()
            {
                listBox1.Invoke(new EventHandler(delegate
                {
                    listBox1.EndUpdate();


                }));
            }
            int nc45 = 0;
            public void add2List(string line)
            {
             
                accFilter4ihush af = new accFilter4ihush();


                if (af.filterOK(line))
                {
                    loadRecNum++;
                    //BeginInvoke
                    listBox1.Invoke(new EventHandler(delegate
                            {
                                
                               // Thread.Sleep(5000);
                                this.listBox1.Items.Add(line);
                              //  Console.WriteLine("--add2List:" + nc45.ToString() + ":" + line);
                                nc45++;
                            }));


                  //  label8.Invoke(new EventHandler(delegate
                  //  {
                  //      label8.Text = "已经加载:" + loadRecNum.ToString();
                        
                  //  }));


                  //long  nowtime=  DateTime.Now.Ticks;
                  //float span = (float)(   ((float)( nowtime - curtime))/((float)10000000)   );
                  //int spanint =(int) span;
                  //label9.Invoke(new EventHandler(delegate
                  //{
                  //    label9.Text = "用  时:" + spanint.ToString() + "秒";


                  //}));


                }
                       


                


                    //this.listView1.Items.Add(item);
               
            }


            

  • 相关阅读:
    idea搭建Spring Boot+Mybatis及使用教程
    CentOS 6 安装配置JDK+tomcat环境
    关于无线路由器之间的连接
    关于链表的面试问题(判断一个单链表中是否有环)
    华为机试ACM(字符组合问题)
    Activity的启动模式
    Notification状态栏显示信息
    Java注释Override、Deprecated、SuppressWarnings
    Fragment
    Service
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3002621.html
Copyright © 2020-2023  润新知