При отладке медленного запуска приложения Eclipse RCP на сервере Citrix я обнаружил, что java.io.createTempFile (String, String, File) занимает 5 секунд. Это делается только при первом выполнении и только для определенных учетных записей пользователей. В частности, я замечаю это в учетных записях анонимных пользователей Citrix. Я не пробовал много других типов учетных записей, но это поведение не проявляется с учетной записью администратора.
Кроме того, не имеет значения, имеет ли пользователь доступ для записи в данный каталог или нет. Если у пользователя нет доступа, вызов будет прерываться на 5 секунд. Если у них есть доступ, для успешного вызова требуется 5 секунд.
Это на сервере Windows 2003. Я пробовал JRE Sun 1.6.0_16 и 1.6.0_19 и вижу то же самое поведение.
Я немного погуглил, ожидая, что это какая-то известная проблема, но ничего не нашел. Кажется, кто-то еще должен был столкнуться с этим раньше.
Платформа 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