在Citrix服务器上调试Eclipse RCP应用程序的缓慢启动时,我发现java.io.createTempFile(String,String,File)需要5秒钟。它仅在第一次执行时才执行此操作,并且仅对某些用户帐户执行此操作。具体来说,我注意到它是Citrix匿名用户帐户。我没有尝试过许多其他类型的帐户,但是管理员帐户没有出现这种现象。
同样,用户是否有权写入给定目录也没有关系。如果用户没有访问权限,则呼叫将花费5秒钟才能失败。如果他们确实可以访问,则呼叫需要5秒钟才能成功。
这是在Windows 2003 Server上。我尝试了Sun的1.6.0_16和1.6.0_19 JRE,并且看到了相同的行为。
我在Google上搜索了一下,期望这是某种已知问题,但没有发现任何东西。似乎以前其他人可能不得不遇到过这种情况。
Eclipse平台使用File.createTempFile()来测试各种目录,以查看它们在初始化期间是否可写,并且此问题使应用程序的启动时间增加了5秒。
我想象以前有人遇到过这种情况,也许会有一些见识。这是我执行的示例代码,它确实是在浪费时间的此调用。我还尝试了第二次调用createTempFile,并注意随后的调用几乎立即返回。
公共静态void main(final String [] args)引发IOException {
最终文件目录=新文件(args [0]);
最后的长startTime = System.currentTimeMillis();
文件file = null;
尝试{
file = File.createTempFile(“ prefix”,“ suffix”,directory);
System.out.println(file.getAbsolutePath());
}最后{
System.out.println(System.currentTimeMillis()-startTime);
if(文件!= null){
file.delete();
}
}
}
该程序的示例输出如下:
C:\> java.exe -jar filetest.jar C:/临时
C:\ Temp \ prefix8098550723198856667后缀
5093
最佳答案
可能是安全随机数生成器的初始化导致了问题。特别是如果无法从操作系统获得安全的随机种子,则回退机制将尝试获取熵。 IIRC的功能之一就是列出临时文件,因此,如果其中包含大量文件,将对启动性能没有帮助。