这个慢的原因是因为你没读取一条记录就写入文件一次,这势必增加了IO的开销,可以使用楼上推荐的带有缓冲区的writer试试

解决方案 »

  1.   


    恩,我也觉得是因为我每条都需要处理的结果我把filewriter 改成了bufferedwriter还是很慢
    BufferedWriter writer = new BufferedWriter(new FileWriter(file));
      

  2.   


    我把filewriter 改成了bufferedwriter还是很慢
    BufferedWriter writer = new BufferedWriter(new FileWriter(file));
      

  3.   


    恩,我也觉得是因为我每条都需要处理的结果我把filewriter 改成了bufferedwriter还是很慢
    BufferedWriter writer = new BufferedWriter(new FileWriter(file));
    默认的BufferedWriter缓冲8192个字符,你可以在构造函数中指定缓存的字符数,楼书试一下吧
      

  4.   


    恩,我也觉得是因为我每条都需要处理的结果我把filewriter 改成了bufferedwriter还是很慢
    BufferedWriter writer = new BufferedWriter(new FileWriter(file));
    默认的BufferedWriter缓冲8192个字符,你可以在构造函数中指定缓存的字符数,楼书试一下吧
    问题不在那,我觉得,我都用nio了,我也试了在实例化的时候制定字节数,没用,
      

  5.   

    两个问题。1.ResultSet的每一次循环是不是会命中数据库,命中的话就有一次网络IO。是不是可以根据可以使用的内存来拿数据,比如一次性拿出100条,然后下一次再拿100条直到取不足100条了表示最后一批了。2.你每条记录都输出一次文件,如楼上所说的增加一个缓冲可以减少IO。不过如果需要更快话,你又会使用NIO的API的话试一下FileChannle.map()这个直接内存映射来写文件。我个人觉得取数据少量时可以直接使用ResultSet,但是在有效率要求的地方最好还是自己来组织SQL完成。你知道每一次调用ResultSet.next()的时候是会一次性读取几条数据放在内存,还是只拿当前一条?
      

  6.   

    为什么每rs.next()写一次,不换种思路;  就算先把3W条数据全load出来放到内存里面再写一次性写进文件也要比这种方式快!
      

  7.   

    如果是数据的话可以导出到excel,每增加一条数据只是添加一行,应该会快很多
      

  8.   

    我怎么觉得问题在26行:
    filter(rs.getString(i)) 这个方法的问题呢?
      

  9.   

    顶楼上,可能filter那里有影响;
    另外,用BufferedWriter减少IO次数,这个是很重要一点;