小弟现在做一个文件分析程序,目标是把300多每个2G的文件进行按行数据筛选,请问高手大约需要多长时间能读完?怎样能提高读取的速度?
我处理完发现需要一周左右能筛选完成,速度很致命,小弟黔驴技穷,请大家指点如何能提高目前这种需求下的效率?严重感谢大家!

解决方案 »

  1.   

    需要按行读取并分析,所以很慢需要好多“天”,所以想用内存文件映射,但是FileChannel怎么和readLine()结合呢?
      

  2.   

    假设 CPU 使用率不到 100%,那么这种任务的时间花费应该按照硬盘读写速度来算。假设硬盘读写平均速度为 70MB/s,那么读完所有文件(600G)所需时间约为:600*1024/70=8777秒=2.43小时。如果读的同时要写的话,假设读取速度降为 10MB/s,那么花费时间应该是 24 小时左右。但据楼主所言需要一个礼拜,可能的原因是:
    1、这是一个大量消耗 CPU 的任务;
    2、这是一个大量消耗内存的任务,而且虚拟内存的使用极大的降低了执行效率。
      

  3.   

    按照楼主所描述的,问题的瓶颈应该在数据的处理上面。也就是说,IO读取每一行记录,已经很快了,但是,读出的记录,处理起来就相对很慢。
    就是IO等处理的现象。最好,应该优化一下处理方面的代码,如果,处理过程中也涉及到了IO操作,那么,相对数度又会下降很多。
    这时再考虑使用FileChannel来优化程序。
    读取,一般情况下,使用BufferedReader就应该很快了。
    写入的程序,考虑使用FileChannel效率会高一些。当然,采用写200行再刷新缓存的方式,也可以提升一些性能。