Во время отладки медленного запуска приложения Eclipse RCP на сервере Citrix я обнаружил, что 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) throws IOException { final File directory = new File(args[0]); final long startTime = System.currentTimeMillis(); File file = null; try { file = File.createTempFile("prefix", "suffix", directory); System.out.println(file.getAbsolutePath()); } finally { System.out.println(System.currentTimeMillis() - startTime); if (file != null) { file.delete(); } } }
Пример вывода этой программы следующий:
C:\>java.exe -jar filetest.jar C:/Temp C:\Temp\prefix8098550723198856667suffix 5093