本人初学 现有一小项目 是数字计算的
从数据库中读取所有数据 N行10列 到datatable
现在如果整体运算会非常慢 
现在想通过多线程来实现 每列单独一个线程计算
再把运算结果合并输出到另一个窗体的gridview中
求高手给个案例 
或者推荐一个好的方法 

解决方案 »

  1.   

    Thread td = new Thread(new ThreadStart(DgvToExcel));//DgvToExcel是线程执行的方法,这个是无参数的
    td.Start();
      

  2.   

    具体算法是这样 比如gridview中8行10列
          第一列   第二列
    第一行  1       2 。
    第二行  2       2
    第三行  3       2
    第四行  4       2
    第五行  8       2
    第六行  6       2
    第七行  7       2
    第八行  8       2。。
    鼠标托选第一列的2、3、4 然后点击button按钮 
    运算就是从第一行第一个单元格开始 依次递减 
    选中的234就是3个数作为减数 gridview内所有数据作为被减数 如
    1-2、2-3、3-4、这是第一次循环
    第二次就是从第二行开始 2-2、3-3、4-4 第三次循环就是从第三行开始 3-2.4-3.5-4
    然后吧每次循环所减的结果 和一个固定的list对比 list包含结果则忽略 最后打印出不包含的结果
      

  3.   

    你都没看懂我说的开窗是什么意思。。http://bbs.csdn.net/topics/390052508
      

  4.   

    RYQYThread = new Thread(new ThreadStart(ThreadRYQY));
    RYQYThread.IsBackground = true;
    RYQYThread.Name = "CreateRYQY";
    RYQYThread.Start(); //自定义方法ThreadRYQY,主要用于线程的调用
            private void ThreadRYQY()
            {
                while (UploadState)
                {
                    Thread.Sleep(60000);                if (this.InvokeRequired)
                    {
                        RYQY ryqy = new RYQY(CheckRYQY);          //实例化一个委托                    fmain.Invoke(ryqy);             //在拥用此控件的基础窗体句柄的线程上执行指定的委托
                    }
                }
            }        private void CheckRYQY()
            {
                bool bol = false;
                bol = ClsRYQY.CreateRYQY(x,y);
            }
      

  5.   

    我认为你的算法是不需要考虑时间因素的,基本没有运算量如果没有猜错,你是把数据从gridview中取出来,计算结果后,写入gridview,最后再两个gridview中的数据进行比较数据库中取出数据后,
    计算不要通过控件取值,
    计算完毕后,
    一次写入控件显示
    本来你的情况用多线程是会提高效率的
    但如果还通过ui访问数据进行计算
    效果还是会一样糟糕
      

  6.   

    你这个从数据库里面读取数据库出来,N行就是代表N个线程,如果行多了,会有很多问题的,例如“数据库访问时间过长,超过线程池大小。”将线程分组吧,等前一组线程执行完了,再执行下一组线程,这样数据库也承受的了。用timer来控制,或者定义全局变量。
      

  7.   

    使用.net的你不了解PLINQ么?那么真是OUT了。这已经是很多年的技术了。了解PLINQ,你再考虑“如何分列计算”的设计问题,比较靠谱。
      

  8.   

    lz的目的不是显示。实际上连DataTable都没有必要考虑,就是要分多个线程进行分别计算,最后“是否和合并一个DataTable上”这不影响效率的。
      

  9.   


    不要把数据全都读取到DataTable再考虑“分列计算”。实际上把过多数据读取到DataTable,这是最消耗时间的。如果各个线程的查询条件并不是完全一致的,那么他们独立地去访问数据库就行了。并且注意读取SQL Server时使用 With(NoLock) 方式!
      

  10.   

    优化你的算法或者SQL语句,这样比多线程效率更好!