1

我有一个程序可以在一个平面文件中写入大约 800 万行数据。截至目前,该程序正在为每条记录调用 bufferedwriter.write,我打算使用以下策略批量写入

  1. 保留一个数据结构(我使用数组)来保存特定数量的记录。
  2. 使用数组将详细信息写入文件。这是代码片段(数组是存储记录的数组的名称,阈值计数是编写过程的开始)

    if (array.length==thresholdCount) {
        writeBulk(array);
    }
    
    public void writeBulk(String[] inpArray) {
         for (String line:inpArray) {
              if (line!=null) {
                   try {
                        writer.write(line +"\n"); 
                   } catch (IOException e) {
                        e.printStackTrace();
                   }
              }
         }
    
     }
    

但是我没有看到太多的性能改进。我想知道是否有办法确定最佳阈值计数?我还计划进一步调整代码,以便将数组中的每个元素存储为一些 n 条记录的串联,然后调用 bulk 方法。例如,长度为 5000 的数组实际上将包含 50000 条记录,其中数组中的每个索引包含 10 条记录。但是在这样做之前,我需要专家意见。

4

1 回答 1

1

对文件的写入在被推送到磁盘之前已经以类似的方式缓冲(除非您刷新 - 实际上并不总是这样做)。因此,预缓冲写入不会加快整个过程。注意:一些 IO 类尝试通过在每次写入后插入刷新请求来进行立即写入。对于那些特殊情况,预缓冲有时会有所帮助,但通常您首先只使用类的缓冲版本,而不是自己手动缓冲。

如果您正在写入文件末尾以外的其他位置,那么您可以看到改进,因为写入文件中间不需要复制硬盘上已刷新条目的内容。

于 2012-08-09T21:28:13.927 回答