在 Citrix 服务器上调试 Eclipse RCP 应用程序的缓慢启动时,我发现 java.io.createTempFile(String,String,File) 需要 5 秒。它仅在第一次执行时执行此操作,并且仅针对某些用户帐户。具体来说,我注意到它是 Citrix 匿名用户帐户。我没有尝试过很多其他类型的帐户,但是管理员帐户不会出现这种行为。
此外,用户是否有权写入给定目录也没有关系。如果用户没有访问权限,调用将需要 5 秒才能失败。如果他们确实有权访问,则调用需要 5 秒才能成功。
这是在 Windows 2003 服务器上。我尝试过 Sun 的 1.6.0_16 和 1.6.0_19 JRE 并看到相同的行为。
我用谷歌搜索了一下,以为这是某种已知问题,但没有找到任何东西。似乎其他人以前必须遇到过这种情况。
Eclipse 平台使用 File.createTempFile() 来测试各种目录以查看它们在初始化期间是否可写,这个问题使我们的应用程序的启动时间增加了 5 秒。
我想有人以前遇到过这种情况并且可能有一些见识。这是我执行的示例代码,以查看确实是这个调用在消耗时间。我还尝试了第二次调用 createTempFile 并注意到后续调用几乎立即返回。
public static void main(final String[] args) 抛出 IOException { 最终文件目录 = new File(args[0]); 最终长 startTime = System.currentTimeMillis(); 文件文件=空; 尝试 { file = File.createTempFile("前缀", "后缀", 目录); System.out.println(file.getAbsolutePath()); } 最后 { System.out.println(System.currentTimeMillis() - startTime); 如果(文件!= null){ 文件.删除(); } } }
该程序的示例输出如下:
C:\>java.exe -jar filetest.jar C:/Temp C:\Temp\prefix8098550723198856667suffix 5093