gpt4 book ai didi

java - 现有文件减慢 java 程序速度

转载 作者:行者123 更新时间:2023-12-01 12:21:38 26 4
gpt4 key购买 nike

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

编辑:

这是非常普遍的情况

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 ...
}
}

关于java - 现有文件减慢 java 程序速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26622348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com