DT是事先主进程读出来放到内存中的,然后我用线程来更新或提交这个内存中的表的值?现在如何增加多线程的数量,从而达到提交更新速度?在不影响多线程更新表的情况下,个人不知怎到写了,还请高手指点一下?现在是我这样加的:                    Thread newthr = new Thread(new ThreadStart(getdate_datatale));
                    newthr.Start();
                    Thread newthr2 = new Thread(new ThreadStart(getdate_datatale));
                    newthr2.Start();
这样报错,更新表时有问题?
        private void BindDatatable(string sql)
        {
            string comboxnew = comboBox1.SelectedItem.ToString();
            try
            {
                con = conn();
                adap = new SqlDataAdapter(sql, con);                SqlCommandBuilder scb = new SqlCommandBuilder(adap);
                if (dt == null)
                {
                    dt = new DataTable();
                }                dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };
                adap.FillSchema(dt, SchemaType.Mapped);
                adap.Fill(dt);                if (dt.Rows.Count > 0)
                {                              Thread newthr = new Thread(new ThreadStart(getdate_datatale));
                    newthr.Start();
                }
           }
            catch (Exception ep)
            {
                errlog(ep.Message);
            }                      }
        private void getdate_datatale()
        {
             try
            {               for (i = 0; i < dt.Rows.Count; i++)
                {
                    
                    try
                    {
                        dt.Rows[i]["sendyorn"] = 1; //置标识为1,为已检索
                        adap.Update(dt);
                      
                    }
                    catch (Exception ep)
                    {
                        errlog(ep.Message );
                    }                    if (result.Equals(success))
                    {
                        try
                        {
                            string update = "update table SET state=1  WHERE id=" + dt.Rows[i]["id"];
                            update_sql(update);
                             log("成功提交数据");
                             
                        }
                        catch (Exception ep)
                        {
                            errlog(ep.Message);
                        }
                    }
                    else
                    {
                         errlog("数据提交失败);                    }                }            }
            catch (Exception ep)
            {                errlog(ep.Message );
            }
            finally
            {
                try
                {
                    con.Close();
                    dt.Clear();
                    adap.Dispose();                }
                catch (Exception ep)
                {
                        errlog(ep.Message);
                }            }
        }

解决方案 »

  1.   

    线程并不一定会提高速度,往往会降低速度,因为线程都是串行的,不是并行的,只有在cpu足够多的情况下才行
      

  2.   

    我是先在内存中更新sendyorn,然后又直接更新的库中的state.
      

  3.   

    根本就不需要多线程呀,使用TIMER类实现,快慢就看你设置TIMER的时间了,例如
    你设置1分钟一次觉得慢了,就设成3秒一次,不就快了