创建临时文件非常慢

时间:2009-11-18 11:11:06

标签: java file-io

调用

的任何理由
File.createTempFile("prefix", ".suffix", new File("C:\\");

可能需要40-50秒才能完成?

更新: 我敲了一个小测试工具,在C:\和默认的tmp文件夹上创建了100个测试文件。指定“C:\”始终比仅保留默认值大约0.9ms,允许JVM预热时间,GC暂停等(不知道为什么会这样,但不是问题。)

没有一次运行遭遇任何类似的延迟,这表明应用程序首先做了其他事情导致问题。

使用Suns JVM 1.6.0_12客户端。

6 个答案:

答案 0 :(得分:2)

上一次开发基于swing的应用程序时,我遇到了JVM中的一个错误,如果桌面上有一个大的zip文件,它会导致文件请求者打开的速度非常慢。当文件夹中存在大量文件时,还存在另一个问题。

可能与您的问题存在关联。您使用的是哪个版本的JDK?

请查看此主题以获取一些信息:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4638397

http://groups.google.com/group/comp.lang.java.help/browse_thread/thread/ec8854f82f381123

磁盘碎片整理也是一个好主意。

答案 1 :(得分:1)

试一试:

try {
        // Create temp file.
        File temp = File.createTempFile("pattern", ".suffix");

        // Delete temp file when program exits.
        temp.deleteOnExit();

        // Write to temp file
        BufferedWriter out = new BufferedWriter(new FileWriter(temp));
        out.write("aString");
        out.close();
    } catch (IOException e) {
    }

答案 2 :(得分:1)

我看到Windows上的文件删除只需要一分钟,但不会创建文件。我会检查以确保您最近进行了碎片整理,并确保您家中有合理的数量的文件。一旦你获得了超过1,000个文件(包括隐藏的文件),Windows就会非常困难。

如果您未指定c:\并允许Java将文件放在其默认位置,会发生什么?

答案 3 :(得分:1)

病毒检查程序有时会使文件系统访问速度变慢,尤其是在Windows系统上。它们拦截了对文件系统的所有访问,并且在允许应用程序从磁盘写入或读取之前可以进行大量处理。

我会检查并禁用任何病毒检查软件,看看是否有帮助。

答案 4 :(得分:0)

如果其他建议无效(禁用病毒扫描程序并检查间谍软件),那么我建议先获取JDK源代码并运行IDE的调试程序,以查看它在createTempFile()期间“挂起”的位置。

答案 5 :(得分:0)

FWIW,我最终不得不运行disk cleanup