Является ли Java 7 WatchService медленным для кого-то еще?
WatchService похож на отличную технологию, но ее слишком медленно, чтобы быть полезной в системах OS X и Linux, на которых я тестировал. Чтобы добавить оскорбление к травме, он, похоже, не получает уведомления обо всех событиях.
Это касается как моего собственного кода, так и канонического примера из Oracle. ( http://docs.oracle.com/javase/tutorial/displayCode.html?code=http://docs.oracle.com/javase/tutorial/essential/io/examples/WatchDir.java )
Я признаю, что порт OS X OpenJDK не уверен в этой функции (см. Https://wikis.oracle.com/display/OpenJDK/Mac+OS+X+Port+Project+Status )
- Рекурсивно перечислить все файлы в каталоге, используя nio.file.DirectoryStream;
- ByteBuffer.allocate () и ByteBuffer.allocateDirect ()
- Java NIO: Что такое IOException: Сломанная труба означает?
- Как отправить и получить сериализованный объект в канале сокета
- Files.walk (), вычислить общий размер
Кто-нибудь использовал это в производстве с успехом?
У меня гораздо лучшее время отклика, если я изменю
folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);
в
folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);
JDK 7 еще не имеет встроенной версии WatchService для MacOS. Вместо того, чтобы слушать собственные события файловой системы, он использует резервную sun.nio.fs.PollingWatchService, которая периодически обходит файловую систему и проверяет последнюю измененную метку времени каждого файла и подкаталога в дереве. Я также обнаружил, что это необычно медленно.
Существует встроенная реализация WatchService для Mac:
http://code.google.com/p/barbarywatchservice/
Я не пытался использовать его сам.