繁体   English   中英

现有文件使Java程序变慢

[英]Existing file slowing down java program

我正在一起运行一些方法,这些方法可以接收许多文本文件,读取它们的内容,然后将有关其内容的内容写到一个新文件中。 我的问题是,当文件存在时,程序速度很慢。 如果删除文件并运行程序,则速度非常快。 我为我的I / O使用BufferedReader和BufferedWriter。 我觉得我没有找到一个简单的答案。 提前致谢! 如果可能的话,我宁愿不发布代码,对不起!

编辑:

这是一般情况

File path= new File("some path");
        try {
            BufferedWriter writer = new BufferedWriter(new FileWriter(path, false));
            //do some string manipulation
            writer.append(string);
            writer.newLine();
                ...
            //once done
            writer.close();
        }catch(IOException e) {
            //... handle this ... 
        } 

问题在于,当该文件存在时,一切都会变慢。 如果没有,那就快了。

当您说“ //做一些字符串操作”时,我将重新审视您的工作。

这是我通过> 1000次迭代发现的:

  • 获取文件句柄和关闭编写器所需的时间通常保持不变
  • 字符串“ ABCDEFGHIJKLMNOPQRSTUVWXYZ”的内部循环操作的平均方差为98ms
  • 相同的内部循环操作(带一个字符串)是一个字符串的四倍,该字符串的大小在操作时间方面引起了更大的变化。 有时程序在2秒内完成,有时是20秒。

我还做了一个此测试的版本,该文件始终总是首先被删除。 没关系。 这是我运行的代码:

public static void main(String[] args) {

    long s = System.currentTimeMillis();
    File path = new File("output.txt");

    long stop = System.currentTimeMillis();
    System.out.println("handle acquired " + (stop - s) );

    try {
        BufferedWriter writer = new BufferedWriter(new FileWriter(path, false));
        //do some string manipulation
        s = System.currentTimeMillis();
        for (int i =0; i < 10000000; i++) {
            String string = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ";
            writer.append(string);
            writer.newLine();
        }
        stop = System.currentTimeMillis();
        System.out.println("loop end " + (stop - s) );

        s = System.currentTimeMillis();
        writer.close();
        stop = System.currentTimeMillis();
        System.out.println("writer closed " + (stop - s) );
    }catch(IOException e) {
        //... handle this ...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM