Является ли Java 7 WatchService медленным для кого-либо еще? - PullRequest
42 голосов
/ 06 марта 2012

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)

Кто-нибудь успешно использовал это в работе?

Ответы [ 2 ]

31 голосов
/ 21 августа 2013

У меня гораздо лучшее время отклика, если я изменю

folder.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY);

на

folder.register(watcher, new WatchEvent.Kind[]{StandardWatchEventKinds.ENTRY_MODIFY}, SensitivityWatchEventModifier.HIGH);
26 голосов
/ 25 июня 2012

JDK 7 еще не имеет встроенной реализации WatchService для MacOS.Вместо прослушивания событий собственной файловой системы он использует резервный sun.nio.fs.PollingWatchService, который периодически проходит через файловую систему и проверяет последнюю измененную метку времени каждого файла и подкаталога в дереве.Я также обнаружил, что он необычайно медленный.

Существует встроенная реализация WatchService для Mac:

http://code.google.com/p/barbarywatchservice/

Я не пытался его использоватья.

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