Создание временного файла невероятно медленно - PullRequest
1 голос
/ 18 ноября 2009

Любая причина, по которой вызову

File.createTempFile("prefix", ".suffix", new File("C:\\");

может потребоваться 40-50 секунд для завершения?

Обновление: я выбил небольшой тестовый комплект, который тестирует создание 100 тестовых файлов на C: \ и папка tmp по умолчанию.Указание «C: \» всегда на ~ 0,9 мс медленнее, чем просто оставить его по умолчанию, учитывая время прогрева JVM, паузы GC и т. Д. (Понятия не имею, почему это должно быть, но это не проблема.)

Ни один запуск не пострадал от такого уровня задержки, который предполагает, что приложение сначала делает что-то другое, что вызывает проблему.

Использование клиента Suns JVM 1.6.0_12.

Ответы [ 6 ]

2 голосов
/ 18 ноября 2009

Давным-давно, при разработке приложения на основе 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 голос
/ 18 ноября 2009

Проверка на вирусы может иногда замедлять доступ к файловой системе, особенно в системах Windows. Они перехватывают весь доступ к файловой системе и могут выполнять значительную обработку, прежде чем приложения смогут писать или читать с диска.

Я бы проверил и отключил все антивирусные программы и посмотрел, поможет ли это.

1 голос
/ 18 ноября 2009

Я видел, как удаление файлов в Windows занимало минуту, но не создание файла. Я хотел бы убедиться, что вы недавно выполнили дефрагментацию, а также что у вас есть разумное количество файлов в вашем доме. После того, как вы получите 1000 файлов (включая скрытые), Windows будет очень трудно.

Что произойдет, если вы не укажете c:\ и не разрешите Java разместить файл в его расположении по умолчанию?

1 голос
/ 18 ноября 2009

попробуйте:

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) {
    }
0 голосов
/ 13 декабря 2013

FWIW, мне пришлось запустить очистку диска .

0 голосов
/ 18 ноября 2009

Если другие предложения не помогают (отключите virusscanner и проверьте наличие шпионских программ), тогда я бы предложил взять исходный код JDK и запустить отладчик IDE, чтобы увидеть, где он «зависает» во время createTempFile().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...