想对grid里的某列进行修改。30000条记录。
在单线程的时候修改时间是12秒。
开启10个线程20秒。
线程的执行过程是这样的。加入到线程队列,然后waitall。每线程根据传入的变量进行取模运算。
大家帮我分析下,是不是。因为对界面的修改次数过多引起的呢?

解决方案 »

  1.   

    支持viena(维也纳nn-下潜15米,潜望镜升起)MM..再送你两颗星..
      

  2.   

    按照你所叙述,牵扯到运算和数据库操作这两个比较重要的操作。那么采用多线程的话,对于在单cpu的操作系统进行数据运算来说,效果不如单线程高;
    其次数据库操作,一般来说,可能很少为每个线程创建一个connection。
    综合而说,你在此用多线程反而不如单线程效果明显。
      

  3.   

    我没有涉及到数据库阿。我只是改了grid的datasource。
    也就是说对datatable进行的操作。
      

  4.   

    private void UseTherading()
            {
                
                DateTime t = DateTime.Now;
               
                ManualResetEvent[] manualEvents = new  ManualResetEvent[10];
                state info = null;
                for(int i=0;i<10;i++)
                {
                    
                    manualEvents[i]=new ManualResetEvent(false);
                    info=new state(i,manualEvents[i]);               
                    ThreadPool.QueueUserWorkItem(new WaitCallback(OnChange), info);
                
                }
                Mutex.WaitAll(manualEvents);
                TimeSpan s = DateTime.Now - t;
                MessageBox.Show(s.ToString());
            }
            private void OnChange(object o)
            {
                state info=(state)o; 
               
                foreach (DataRow r in ((DataTable)this.gridControl1.DataSource).Rows)
                {
                    if (int.Parse(r["cid"].ToString()) % 10 == info.i)
                    r["f05001005"] = 1000.00;
                }
                info.manualEvent.Set();
            }
      

  5.   

    public class state
        {
            public int i;
            public ManualResetEvent manualEvent;       public state(int j,ManualResetEvent m) 
           {
               i = j;
               manualEvent = m;    }
        }
      

  6.   

    to 我没有涉及到数据库阿。我只是改了grid的datasource。
    也就是说对datatable进行的操作。如果这样,属于纯粹cpu计算,就更没必要使用多线程了,多线程的使用会增加cpu的负担。
      

  7.   

    纯cpu计算用多线程是画蛇添足!