zoukankan      html  css  js  c++  java
  • 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);
               
            }


            
  • 相关阅读:
    ReentrantReadWriteLock锁例子
    线程安全的atomic wrapper classes例子
    统一处理jquery ajax请求过程中的异常错误信息的机制
    理解RESTful架构
    适配器模式的两种实现方式
    第一部分:开发前的准备-第一章 什么是Andorid
    cocos2d-x开发记录:二,基本概念(骨骼动画)
    cocos2d-x开发记录:二,基本概念(粒子系统,Scheduler和定时器)
    cocos2d-x开发记录:二,基本概念(导演,场景,层和精灵,场景切换,效果)
    cocos2d-x开发记录:二,基本概念(动作,动画,坐标系统)
  • 原文地址:https://www.cnblogs.com/attilax/p/15199692.html
Copyright © 2011-2022 走看看