解决方案 »

  1.   


    我拿5w行数据跑了下,一次性全部读取。不用异步,大概要5s,如果用了上面的BackGroudWorker,居然要等16s左右才出来结果,虽然解决了窗体假死问题
      

  2.   

    http://download.csdn.net/detail/happy09li/4425169加一个等待界面
      

  3.   

    使用多线程的Task类,使用dataTable的beginxxx异步方法
      

  4.   


    我拿5w行数据跑了下,一次性全部读取。不用异步,大概要5s,如果用了上面的BackGroudWorker,居然要等16s左右才出来结果,虽然解决了窗体假死问题真是奇怪,为什么会有这么大的差别。
      

  5.   

    我的想法是...你预估一下1W行要多少时间,10W行要多少时间. 
    读取之前提示用户需要多少秒就行了. EXCEL装5W行可以10W行没必要哇.何况50W行,你想下用户用这个是来干什么的,到底是不是真的有必要都显示出来.
      

  6.   

    我感觉,显示10W这么多数据是没什么压力的,不显示也可以,那个dataGridView可以不要,但必须要读到dataTable,然后还要对这些数据进行关键词筛选。
    现在的问题是读到dataTable,在UI里肯定会造成界面假死,在其他线程里,速度又变慢。是方法问题吗?代码都在上面
      

  7.   

    如果只是为了显示,而不是为了马上计算,可以先 select top 10000条出来,放在table1,然后再用BackGroudWorker来select所有,这样可以在短时间内取出足够用户查看的数据.
    就是和上面有提到的分页类似的效果
      

  8.   

    如果只是读取数据的话,甭用那个gridview了,用listview单独写个线程一条一条的把数据插进去,用不了多少多长时间,最起码画面不会卡死,用户会看到那个竖排滚动条在一直缩小,也知道数据在一点一点往里加
      

  9.   

    用多线程啊,开一个线程专门来读取Excel
      

  10.   

    实际情况说不定就如你说的会变慢.
    既然这样子,是不是可以换一种方案来做,先通过程序把excel的数据导入到access中,但后在access中做处理,然后取出结果?
    也可以用更高效一点的单机版数据库sqlite来配合